E aí pessoal, estou migrando um sistema legado para uma arquitetura mais atual JPA/Hibernate, por enquanto está muito legal, no entanto estou tendo problemas com um relacionamento, onde na montagem do SQL os joins estão errados, vou explicar com código:
Safra.java
@Entity
@Table(name="SAFRA")
@IdClass(SafraPK.class)
public class Safra implements Serializable {
@Id
private Origem origem = new Origem();
@Id
private Integer codigo;
@Column(name="SEQSAF")
private Integer sequencia;
...
SafraPK.java
@Embeddable
public class SafraPK implements Serializable {
@Column(name="CODSAF")
private Integer codigo;
@ManyToOne
@JoinColumns({
@JoinColumn(name="CODEMP",columnDefinition="CODEMP"),
@JoinColumn(name="CODORI",columnDefinition="CODORI")
})
private Origem origem = new Origem();
...
Origem.java
@Entity
@Table(name="ORIGEM")
@IdClass(OrigemPK.class)
public class Origem implements Serializable {
@Id
private Integer empresa;
@Id
private String codigo;
@Column(name="DESORI")
private String descricao;
...
OrigemPK.java
@Embeddable
public class OrigemPK implements Serializable {
@Column(name="CODEMP")
private Integer empresa;
@Column(name="CODORI")
private String codigo;
...
Não sei onde estou errando, só sei que na saída do SQL o relacionamento aparece errado:
select
safra0_.CODSAF as CODSAF1_1_,
safra0_.CODEMP as CODEMP1_1_,
safra0_.CODORI as CODORI1_1_,
safra0_.SEQSAF as SEQSAF1_1_,
origem1_.CODORI as CODORI3_0_,
origem1_.CODEMP as CODEMP3_0_,
origem1_.DESORI as DESORI3_0_
from
SAFRA safra0_,
ORIGEM origem1_
where
safra0_.CODEMP=origem1_.CODORI(+) <<<< AQUI! SAFRA.CODEMP = ORIGEM.CODORI
and safra0_.CODORI=origem1_.CODEMP(+) <<<<< AQUI! SAFRA.CODORI = ORIGEM.CODEMP
and safra0_.CODSAF=?
and safra0_.CODEMP=?
and safra0_.CODORI=?
Notem que ele ligou SAFRA.CODEMP = ORIGEM.CODORI ! Como resolvo essa ordem?