Estou no início de um projeto grande e que no momento altero muitas vezes o meu modelo, consequentemente o meu mapeamento. Estou utilizando o xdoclet para geração dos .hbm.xml. Porém o xdoclet já me deixou na mão em 2 casos:
<nested-composite-element>
<key-many-to-one>
Talvez surja mais algum mas não posso ficar consertando os buracos deixados pelo xdoclet toda vez que gero os mapeamentos.
O Middlegen também tem estas deficiências? Ele se baseia no banco de dados pra gerar os hbm.xml?
Middlegen ou XDoclet?
2 Respostas
acho que os dois casos o XDoclet resolve,
o da chave, ele resolve com certeza,
você só tem que criar um objeto para ser a chave primária, contendo todas as propriedades que constam na chave,
mapeia estas propriedades normalmente, e na classe destino, declara uma propriedade do tipo da chave (classe criada para representar a chave) com a tag especificando que ela é o ID.
o unico porem, é que a classe ID tem de ser Serializavel.
A chave composta não tem problema (composite-element) ele gera na boa. O problema está com o “nested”. Quanto ao <key-many-to-one> eu estou com as tags assim:
/**
* @return Returns the item.
* @hibernate.many-to-one
* @hibernate.column name = "sc_id"
* @hibernate.column name = "mtaux_id"
* @hibernate.column name = "fil_id"
* @hibernate.column name = "sci_dt_entrega"
*/
public RelationshipItemSolicitacaoCompra getItem() {
return item;
}
E olha o mapeamento que ele me dá:
<many-to-one
name="item"
class="br.com.atmtec.bean.RelationshipItemSolicitacaoCompra"
cascade="none"
outer-join="auto"
update="true"
insert="true"
access="property"
>
<column
name="sc_id"
/>
<column
name="mtaux_id"
/>
<column
name="fil_id"
/>
<column
name="sci_dt_entrega"
/>
</many-to-one>
pq ele não coloca o <key-many-to-one> invés do simples <many-to-one>? Só pra explicar eu tenho uma classe ItemSolicitaçãoCompraPK que é representa minha chave composta neste caso.