0

hibernateを使用する1対多マッピングで1つの問題があります。1対多のデタッチ子テーブルに基づくCriteria親テーブルのフェッチ

私は2つのクラス、アドレスを持っています。人はアドレス(1対多)によってマッピングされます 私はすべての人を取得したいと思いますAddress = "xxxx"; 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()); 

同等の内部結合を行う主基準の内部基準を作成する。

関連する問題