@ManyToOne 관계는 잘 작동 :이 Telefoni 테이블에서 하나의 행을 가져 오는, 1 SQL 쿼리를 실행하고 약 10ms의 지속복합 관계없이
@Entity
@Table
public class Telefoni{
... other fields not included for simplicity sake
private DjecaRoditelja djecaRoditelja;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDDjeteta", referencedColumnName = "IDDjeteta")
public DjecaRoditelja getDjecaRoditelja() {
return this.djecaRoditelja;
}
public void setDjecaRoditelja(DjecaRoditelja djecaRoditelja) {
this.djecaRoditelja = djecaRoditelja;
}
}
...
// in some DAO method
tel = entityManager.find(Telefoni.class, primaryKey);
.
는@Entity
@Table
public class Telefoni{
... other fields not included for simplicity sake
private KontaktOsobe kontaktOsobe;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "KORISNIK", referencedColumnName = "korisnik"),
@JoinColumn(name = "PARTNER", referencedColumnName = "Partner"),
@JoinColumn(name = "SifraKonOs", referencedColumnName = "SifraOsobe") })
public KontaktOsobe getKontaktOsobe() {
return this.kontaktOsobe;
}
public void setKontaktOsobe(KontaktOsobe kontaktOsobe) {
this.kontaktOsobe = kontaktOsobe;
}
}
...
// in some DAO method
tel = entityManager.find(Telefoni.class, primaryKey);
이것은 모든 관계가 해결 될 때까지 열심히 모든 부모 개체와 모든 부모의 부모를 가져 오는 37 개 SQL 쿼리를 실행합니다
그러나 lazy 페칭은 복합 @JoinColumns 어떤 @ManyToOne 관계를 추가 할 때 작동을 멈 춥니 다. 약 600ms 동안 지속됩니다.
내 엔티티에 하나의 추가 릴레이션을 추가하면 성능이 60 배나 떨어집니다. 데이터베이스 모델을 변경하는 것 외에는 복합 릴레이션을 사용하기 위해 게으른 페칭을 수행 할 수있는 방법이 있습니까?
편집 :
더 자세하게 조사 후 문제가 복합 관계와 관련,하지만 관계는 JPA/최대 절전 모드가 기본 키가 정의되어 있지 않은 이상 아무것도 물마루되지 않습니다.
따라서 식별 열과 고유 한 자연스러운 테이블 및 여러 테이블이 서로 관련되어있는 경우 - 열심히 가져 와서 다른 테이블을 넣으려면 어느 것이 덜 비참 할 지 결정해야합니다. Hibernate의 기본 키로 사용된다.