Salvem,
Tenho duas tabelas, Parceiro e Contato. Parceiro tem um relação de one-to-many com
Contato.
Sendo assim, resolvi definir uma propriedade em Parceiro que seria uma coleção
de Contatos.
Tudo funciona "quase" da forma que deveria. O problema é que, quando o Hibernate vai
carregar a coleção de Contatos, o select que ele executa tem campos repetidos, mais precisamente
os campos que fazem parte da classe ContatoPK.
Como resolver isso, pois assim tenho dados trafegando pela rede sem necessidade, sem contar
que alguns bancos não aceitam isso.
Qualquer palpite tá valendo.
SELECT contato.CODCONTATO as CONTATO_,
contato.CODPARC as CODPARC_,
contato.NOMECONTATO as NOMECONTATO_,
contato.CODCONTATO as CONTATO,
contato.CODPARC as CODPARC from TGFCTT contato where contato.CODPARC = ?
Parceiro :
CODPARC INT (PK)
NOMEPARC VARCHAR(30)
Contato:
CODCONTATO INT (PK)
CODPARC INT (PK) (FK)
NOMECONTATO VARCHAR(30)
Ei a definição do hbm.xml para ambas as classes:
<class name="persistence.Parceiro" table="TGFPAR">
<id name="codigo" column="CODPARC" type="int">
<generator class="assigned"/>
</id>
<property name="nome" column="NOMEPARC" type="string"/>
<set name="contatos" lazy="false">
<key column="CODPARC"/>
<one-to-many class="persistence.Contato"/>
</set>
</class>
<class name="persistence.Contato" table="TGFCTT">
<composite-id name="pk" class="persistence.ContatoPK">
<key-property name="codigo" column="CODCONTATO" type="int"/>
<key-property name="codParc" column="CODPARC" type="int"/>
</composite-id>
<property name="nome" column="NOMECONTATO" type="string"/>
</class>
public class Parceiro implements Serializable{
private int codigo;
private String nome;
private Set contatos;
/* Getters e Setters*/
}
public class Contato implements Serializable{
private ContatoPK pk;
private String nome;
/* Getters e Setters*/
}
public class ContatoPK implements Serializable{
private int codigo;
private int codParc;
/* Getters,Setters,hashCode e equals */
}
