JPA에서 일대 다 관계가있는 두 엔티티에 이상한 문제가 있습니다. 나는 EclipseLink 2.3.2와 함께 Glassfish 3.1.2.2를 사용하고 있습니다. 이 첫 번째 엔티티입니다 :JPA OneToMany eager fetch가 작동하지 않습니다.
@NamedQueries({
@NamedQuery(name="SampleQueryGroup.findAll", query="SELECT g FROM SampleQueryGroup g")
})
@Entity
public class SampleQueryGroup implements Serializable {
// Simple properties, including id (primary key)
@OneToMany(
mappedBy = "group",
fetch = FetchType.EAGER,
cascade = {CascadeType.REMOVE, CascadeType.MERGE}
)
private List<SampleQuery> sampleQueries;
// Gettes/setters, hashcode/equals
}
그리고이 두 번째입니다 :
@Entity
public class SampleQuery implements Serializable {
// Simple properties, including id (primary key)
@ManyToOne(cascade = {CascadeType.PERSIST})
private SampleQueryGroup group;
// Gettes/setters, hashcode/equals
}
내가
SampleQueryGroup.findAll
라는 이름의 쿼리를 실행하기 위해 주입
EntityManager
을 사용하는 무 상태 세션 빈을 가지고있다. 또한 SSB 메소드를 호출하고 메소드에 의해 반환 된
SampleQueryGroup
각각에 대해
SampleQueryGroup.getSampleQueries()
을 통해 반복하는 CDI 관리 빈이 있습니다. 필자는 코드를 붙여 넣지 않았습니다. Java EE 응용 프로그램의 경우 매우 간단하고 어떻게 든 표준이되었습니다.
열심히 가져 오기가 작동하지 않고 getSampleQueries()
이 빈 목록을 반환하는 것이 문제입니다. 그러나 가져 오기 유형을 다시 FetchType.LAZY로 변경하면 모든 것이 제대로 작동하고 목록이 올바르게 채워집니다. 나는 이것이 왜 일어나는 지 이해하지 못한다. 내부 캐싱 메커니즘과 관련이 있습니까?
난 그게 문제라고 생각 당신에게 제임스 감사드립니다. 엔티티를 지속시키는 SSB의 방법에서는 명시 적으로 각 엔티티를 다른 엔티티에 설정/추가해야합니까? –