2014-09-08 1 views
0

JPA 2.1을 사용하고 있습니다. 다음과 같은 구조 Dr01, Dr02Dr03 :JPA 필터 엔티티 객체 중첩 목록

public class Dr01 implements Serializable { 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dr01") 
    private List<Dr02> dr02List; 

} 
public class Dr02 implements Serializable { 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dr02") 
    private List<Dr03> dr03List; 

    @JoinColumn(name = "DR2CLM", referencedColumnName = "DR1CLM", insertable = false, updatable = false) 
    @ManyToOne(optional = false) 
    private Dr01 dr01; 

}  

public class Dr03 implements Serializable { 

    @JoinColumns({ 
     @JoinColumn(name = "DR3CLM", referencedColumnName = "DR2CLM", insertable = false, updatable = false), 
     @JoinColumn(name = "DR3PTFN", referencedColumnName = "DR2PTFN", insertable = false, updatable = false)}) 
    @ManyToOne(optional = false) 
    private Dr02 dr02; 

    private elementOBJ element; 
} 

public class elementOBJ implements Serializable { 

    @Column(name = "XXX") 
    private int id; 

    @Column(name = "YYY") 
    private int status; 
} 

내가 Dr01에서 선택하고 상태 필드 내부 1의 값을 포함하는 요소 개체가 단지 Dr03 객체를 얻으려면 내가 3 엔티티를 가지고있다.

상태 값으로 필터링 된 dr03List는 어떻게 검색합니까? (선택 후 필터링되지 않음).

감사의 말을 전하고 싶습니다. 도움이 될 수 있습니다

+0

를 필터링 할 비 JPA @Where 주석을 사용하여? 특정 element.status 값을 가진 Dr03 엔티티 만 원한다면 "dr03 dr3에서 dr3 선택"을 시도 했습니까? dr3.element.status = : status? – Chris

+0

@Chris : 나는 그것을 할 수 있음을 알고 있지만 Dr01 (ID로)을 선택하고 Dr02와 Dr03을 얻고 싶지만 필터링하도록하십시오. 내가 무슨 뜻인지 이해 하겠니? – user2046810

+0

아닙니다. 특정 Dr01을 가져 와서 해당 엔티티 내의 콜렉션을 필터링하려면 JPA 범위 내에 있지 않습니다. 반환되는 관리 엔티티는 데이터베이스에있는 내용을 반영하기위한 것입니다. 대신 Dr01.dr02List 관계를 트래버스하지 않고 직접 원하는 필터를 사용하여 컬렉션을 쿼리합니다. – Chris

답변

0

옵션 :

  1. 이 DR03 테이블의 상태에 따라 DB보기를 만들고 그에게 엔티티를 매핑합니다.
  2. 상태를DiscriminatorColumn으로 사용하여 JPA 상속을 사용하십시오.
  3. 최대 절전 모드로 컬렉션을 정확하게 한 후 무엇