0

최대 절전 모드를 사용하여 일대 다 매핑에 하나의 문제가 있습니다.일대 다 분리 된 조건 자식 테이블을 기준으로 부모 테이블 가져 오기

나는 두 클래스, 사람주소입니다. 사람이 주소로 매핑 됨 (일대 다) 주소가 "xxxx"인 모든 Person을 얻고 싶습니다. DetachedCriteria을 사용하여이 쿼리를 준비하는 방법 아래에 나는 나의 DAO 클래스에서 코드 조각을 추가했다. 그것을 완성하도록 도와주세요.

Person.java

@Entity 
@Table(name="PERSON") 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="personId") 
    private int id; 
    @Column(name="personName") 
    private String name; 
    @OneToMany(cascade =CascadeType.ALL,fetch = FetchType.LAZY) 
    @JoinColumn(name="personId") 
    private Set <Address> addresses; 
} 

Address.java

@Entity 
@Table(name = "ADDRESS") 
public class Address { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "addressId") 
    private int id; 
    @Column(name = "address",nullable=false) 
    private String address; 
    @ManyToOne(cascade =CascadeType.ALL) 
    @JoinColumn(name="personId",nullable=false) 
    private Person person; 
} 

내 DAO

DetachedCriteria c = DetachedCriteria.forClass(Person.class); 
     List<Person> persnList =null; 
     /*here i want add some restriction for 
      fetch all person whose address = "abcd" 
      here address is collection. how to set restriction in it ?. 

      */ 
     persnList = getHibernateTemplate().findByCriteria(c); 
     System.out.println(persnList.size()); 

선택 * 사람의 경우 Address.address = "XXXX"; 이것을 구현하는 방법 DetachedCriteria?

답변

1
DetachedCriteria c = DetachedCriteria.forClass(Person.class); 
    List<Person> persnList =null; 

DetachedCriteria addrCrit = c.createCriteria("addresses").addRestriction(Restrictions.eq("address","abcd")); 
addrCrit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

    persnList = getHibernateTemplate().findByCriteria(c); 
    System.out.println(persnList.size()); 

동등한 내부 결합을 수행 할 주요 조건에 대한 내부 기준을 만듭니다.