Boas! Peço desculpa pelo título longo mas não sabia como reduzir isto...
Esta situação que falo ocorre regularmente no sítio onde trabalho porque existem objectos que estão guardados através de um "hibernate" com 15 anos, que é um framework proprietário e que se chama RecDatos. Posteriormente passou a usar-se o Hibernate (quando este passou a estar disponível LOL) e agora temos objectos mapeados em Hibernate e em RecDatos. Isto obviamente dá problemas quando se querem fazer ligações N-N entre objectos mapeados nos diferentes frameworks. Inicialmente optámos por mapear a tabela de junção em hibernate e usá-la como se fosse uma ligação de 1-N entre o objecto hibernate e esse outro objecto que mapeava a tabela de junção. No entanto isto obrigava a um trabalho extra (criação do hbm.xml, do POJO e do objecto) que se (no futuro) o outro objecto passa-se a estar em Hibernate seria deitado ao lixo...
Portanto ataquei pela teoria do KISS (Keep It Simple & Short) e fiz um mapeamento da tabela de junção através de um set. O Hibernate permite que usando set's se defina em que tabela guardar esse set (podemos usar set's no objecto que depois não são mapeados em nada na BD). No meu caso apenas precisava de uma string por isso o mapeamento é muito simples:
<set name="set1" table="table1">
<key column="id_element"/>
<element type="java.lang.String" column="id_table2"/>
</set>
Mas podem ser usados tipos mais complexos:
<set name="set2" table="table2">
<key column="id_element"/>
<composite-element class="class1">
<property name="var1" type="java.lang.Long" column = "column1"/>
<property name="var2" type="java.lang.String" length="255" column = "column2"/>
<property name="var3" type="java.lang.String" length="255" column = "column3"/>
</composite-element>
</set>
Em ambos os casos a teoria é sempre a mesma:
Um set no objecto com o nome definido (name="set1") guardado numa determinada tabela na BD (table="table1"). O id do elemento pai é a key (e define-se o nome da coluna que guarda esse id) e os element são as restantes colunas e têm de corresponder aos tipos dentro do Set definido. O name dentro do property tem de ser igual ao da variável dentro da class (para o hibernate conseguir fazer set's e get's) e o resto é "magia" do hibernate... ;)
Espero que esta dica vos venha a ajudar e alguma dúvida é só perguntarem.
Links:
Hibernate
Sem comentários:
Enviar um comentário