基于子表的一对多分离条件父表获取
Posted
技术标签:
【中文标题】基于子表的一对多分离条件父表获取【英文标题】:one-to-many detached Criteria parent table fetch based on child table 【发布时间】:2011-10-21 10:58:18 【问题描述】:我在使用 hibernate 进行一对多映射时遇到一个问题。
我有 2 个类,Person 和 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;
地址.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());
在将执行等效内部连接的主要标准上创建内部标准。
【讨论】:
以上是关于基于子表的一对多分离条件父表获取的主要内容,如果未能解决你的问题,请参考以下文章