Oi pessoal,
Tou com um problema no mapeamento do Hibernate. Tenho duas tabelas Colaborador e Alerta, e uma tabela que faz a associação. Um colaborador pode ter N alertas e um alerta pode estar associado a N colaboradores. O que eu pretendo é obter todos os alertas para um colaborador. De seguida ponho o código para ficar mais fácil de visualizar:
Alerta.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.dominio">
<class name="Alerta" table="ALERTA">
<id name="id" type="long" column="ID">
<generator class="sequence">
<param name="sequence">alerta_sequence</param>
</generator>
</id>
<many-to-one name="autor" class="com.dominio.Colaborador" lazy="proxy" not-null="true">
<column name="ncautor" />
<column name="vcautor" />
</many-to-one>
<property name="dataCriacao" column="DATACRIACAO" type="calendar" not-null="true"/>
<property name="assunto" column="ASSUNTO" type="string" length="80"/>
<property name="mensagem" column="MENSAGEM" type="string" length="2000"/>
<set name="destinatarios" table="COLABORADORALERTA" lazy="false">
<key>
<column name="IDALERTA" />
</key>
<many-to-many class="Colaborador">
<column name="NUMEROCOLABORADOR" />
<column name="VERSAOCOLABORADOR" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
ColaboradorAlerta.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.dominio">
<class name="ColaboradorAlerta" table="COLABORADORALERTA">
<composite-id name="id" class="ColaboradorAlerta$Id">
<key-property name="numeroColaborador" column="NUMEROCOLABORADOR" type="int" />
<key-property name="versaoColaborador" column="VERSAOCOLABORADOR" type="int"/>
<key-property name="idAlerta" column="IDALERTA" type="int"/>
</composite-id>
<many-to-one name="destinatario" class="com.dominio.Colaborador" lazy="proxy" not-null="true">
<column name="numerocolaborador" />
<column name="versaocolaborador" />
</many-to-one>
<set name="alerta" table="ALERTA" inverse="true">
<key column="ID"/>
<many-to-many column="ID" class="ALERTA"/>
</set>
</class>
</hibernate-mapping>
O problema está no composite id que não corresponde ao da tabela Alerta. Mas naturalmente não corresponderia porque a sua chave é apenas o id do alerta.
Alguém me pode dar uma ajuda em como devo efectuar o mapeamento por favor. Se está incorrecto ter um Set para os Alertas qual a forma mais indicada de o fazer? O que eu quero no fundo é uma inversão do que é feito no Alerta.
Muito obrigado.