2010-11-28 5 views
2

엔티티 A와 엔티티 B의 두 엔티티가 있다고 가정합니다. 두 엔티티에 대해 두 개의 테이블이 정의됩니다. EntityB는 EntityA의 하위 엔터티입니다. hibernate annotation을 사용하는 java pojos에서 아래의 테이블 EntityA와 EntityB에 해당하는 두 클래스를 정의했습니다.Hibernate : 상위 엔티티의 필터가 암시 적으로 하위 엔티티를 필터링합니까?

@FilterDef(name = "myfilter", parameters = { @ParamDef(name = "year", type = "int") }, defaultCondition = ":year = year") 

    public class EntityA 

    { 

     @OneToMany(mappedBy="EntityA") 
     List<EntityB> getEntityBList() 
     { 
     } 

    } 


    public class EntityB 
    { 

     @ManyToOne 
     @joincolumn(name="entityA_id") 
     EntityA getEntityA() 
     { 
     } 

    } 

나는 EntityA에서 필터를 얻었으므로. EntityB는 부모 자식 관계를 염두에두고있는 EntityA의 필터링 된 개체에 해당하는 개체 만로드하거나 EntityB에 필터를 명시 적으로 넣어야하는지 여부를 암시합니까?

2010 년에 해당하는 개체 만로드되도록 EntityA가 필터링되는 경우의 예입니다. EntityB의로드 된 객체는 2010 년에만 해당하는 EntityA 객체의 자식이어야합니다.

답변

1

EntityB은 절대로 직접 쿼리되지 않지만 항상 entityA.getEntityBList()을 통해로드되는 경우 필터가 작동합니다. 그러나 직접 EntityB을 쿼리하면 결과가 필터링되지 않습니다. 필터를 Hibernate에 의해 실행 된 모든 SQL의 WHERE 부분에 포함 된 제한 조항으로 간주하여 EntityA을로드하십시오.

+0

엔티티 B가 아닌 엔티티 A 테이블에만 연도 열이 있습니다. 만약 내가 그것을 직접 쿼리하더라도 필터링 할 수 EntityB 싶어요. 어떻게해야합니까? 제발 샘플 코드를 제공해주세요. –

+0

너무 많은 날 동안 내 질문에 답변 할 본문이 없습니다. 문제의 포인트를 만드는 동안 명확하지 않습니까? 내 질문을 개선하려면 어떻게해야합니까? –

+0

대기중인 질문에 모두 답변 해 주셔서 감사합니다. –

0

나는 동일한 문제가있었습니다. 당신은 내가 내 최대 절전 모드 정의를 위해 사용되는 XML을했습니다 볼 수 있듯이 그것은 예를

<filter 
    name="myFilter" 
    condition="((select a.myProperty from EntityA a where a.id = entityA_id) = :myPropertyParam)" 
/> 

를 들어, 당신은 명시 적으로 EntityA에 대한 참조를 확인하는 EntityB에 대한 필터를 정의 할 필요가 있다고 밝혀졌다. 특수 효과를 사용할 수도 있습니다.

관련 문제