基于子表的一对多分离条件父表获取

Posted

技术标签:

【中文标题】基于子表的一对多分离条件父表获取【英文标题】:one-to-many detached Criteria parent table fetch based on child table 【发布时间】:2011-10-21 10:58:18 【问题描述】:

我在使用 hibernate 进行一对多映射时遇到一个问题。

我有 2 个类,PersonAddress。人员按地址映射(一对多) 我想得到所有地址=“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;

地址.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());

select * from person where 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());

在将执行等效内部连接的主要标准上创建内部标准。

【讨论】:

以上是关于基于子表的一对多分离条件父表获取的主要内容,如果未能解决你的问题,请参考以下文章

主表和子表是一对多,查询主表数据以及子表的某一条数据

如何处理 CORE DATA 中的一对多关系

什么是父表和子表

SQL Join 一对多从满足条件的相同键值组中提取值

ACCESS级联删除一对多关系的记录

SQLAlchemy学习-4.一对一关系