Ola,
Alguem ja teve experiencia com composite ID no Hibernate ?
Ola,
Alguem ja teve experiencia com composite ID no Hibernate ?
[quote=zap]Ola,
Alguem ja teve experiencia com composite ID no Hibernate ?[/quote]
sim! … da um alhada nos comentarios q fiz nesses 2 posts
Ola Lavieri,
Tinha lido esses dois posts, ainda agora a pouco. Posts muito uteis por sinal …
Estou com um problema com um mapeamento. Um dos atributos da PK que faz parte do composite-id eh um outro objeto.
public class EntidadeNegocioPK{
private Integer idUnidade;
private Integer idEmpresa;
}
public class EntidadeNegocio{
private EntidadeNegocioPK entidadeNegocioPK;
private String tipo;
}
public class ItemPedidoPK{
private EntidadeNegocioPK entidadeNegocioPK;
private Integer idItem;
}
public class ItemPedido{
private ItemPedidoPK itemPedidoPK;
private String descricao;
private Double preco;
}
O meu problema eh justamente mapear (no meu caso estou usando atraves do arquivo XML) o ItemPedido que tem na tabela ITEM_PEDIDO as seguintes chaves compostas ( ID_UN, ID_EMP, ID_ITEM ) no composite-id
<composite-id name="ItemPedidoPK" class="entidade.ItemPedidoPK">
<key-property name="entidadeNegocioPK.idUnidade" column="id_un" type="java.lang.Integer" />
<key-property name="entidadeNegocioPK.idEmpresa" column="id_emp" type="java.lang.Integer" />
<key-property name="idItem" column="id_item" type="java.lang.Integer" />
</composite-id>
Eu Precisaria de algo do tipo “entidadeNegocioPK.idUnidade” para que encontrasse o atributo correto, mas dessa forma nao funciona
Tem alguma dica ?
não sei e não gosto de mapear por xml
mais pelo que entendo, vc não deve mapear a PK com outra PK e sim com seus devidos atributos…
então ficaria algo assim
[code]<composite-id name=“ItemPedidoPK” class=“entidade.ItemPedidoPK”>
<key-property name=“idUnidade” column=“id_un” type=“java.lang.Integer” />
<key-property name=“idEmpresa” column=“id_emp” type=“java.lang.Integer” />
<key-property name=“idItem” column=“id_item” type=“java.lang.Integer” />
</composite-id> [/code]
Entao, dessa forma tinha testado e realmente funciona.
Mas o caso de criar uma classe com os atributos idUnidade e idEmpresa eh devido a necessidade desses atributos em muitas outras classes, como Pedido e Vendedor, pois nas tabelas mapeadas por estas classes sempre existem os campos ID_UN e ID_EMP.
O fato de usar a classe EntidadeNegocioPK como um atributo de ItemPedidoPK eh simplesmente por ter os atributos necessarios (idUnidade e idEmpresa), mas de fato nem precisaria ser uma classe de PK, poderia ser qualquer outra, desde que tivesse os atributos.
No composite-id eu nao poderia ter um dos <key-property> sendo um atributo do tipo objeto de outra classe ?
Esse eh o problema que eu encontrei para mapear
Não sei se poderia… acho que como Embeddable object pode… mais ai teria que ser algo assim
[code]<composite-id name=“ItemPedidoPK” class=“entidade.ItemPedidoPK”>
<key-property name=“entidadeNegocioPK” type=“EntidadeNegocioPK” />
<key-property name=“idItem” column=“id_item” type=“java.lang.Integer” />
</composite-id>[/code]
com disse não sei mapear com XML e não gosto dessa abordagem acho annotation muito + elegante… mais facil na manutenção e mais simples
Certo, vou tentar fazer dessa forma.
Estou iniciando em Hibernate, nos exemplos q estudei tem tudo mapeado como XML. Mas vou estudar as tags de configuracao via Annotations.
Valeu pela resposta, assim q eu testar eu dou um feedback
[quote=zap]Certo, vou tentar fazer dessa forma.
Estou iniciando em Hibernate, nos exemplos q estudei tem tudo mapeado como XML. Mas vou estudar as tags de configuracao via Annotations.
Valeu pela resposta, assim q eu testar eu dou um feedback[/quote]
existem ferramentas que podem te ajudar neste trabalho, fazem parte do código, seguem um padrão, o código não fica perfeito mais é um bom começo…
O netbeans tem uma ferramenta propria para fazer mapeamento via annotation, tem ainda a ferramenta do Hibernate Tools integrada que tb faz o mapeamento… No eclipse vc pode baixar o plug-in do Hibernate tools para criar o mapeamento …
Como disse nenhum dessas abordagem fica perfeito para tudo, principalmente para mapeamento complexos de relacionamento, mais é um bom start…
Infelizmente o
<key-property name="entidadeNegocioPK" type="EntidadeNegocioPK" />
nao funcionou. Ele reclama que as colunas da tabela nao estao mapeadas:
Initial SessionFactory creation failed org.hibernate.MappingException: Could not determine type for: EntidadeNegocioPK, for columns: [org.hibernate.mapping.Column(entidadeNegocioPK)]
2009-03-25 16:05:41,025ERRORintercommerce.hibernate.HibernatePersistenceManager->Could not determine type for: EntidadeNegocioPK, for columns: [org.hibernate.mapping.Column(entidadeNegocioPK)]
org.hibernate.MappingException: Could not determine type for: EntidadeNegocioPK, for columns: [org.hibernate.mapping.Column(entidadeNegocioPK)]