首页 > PHP资讯 > JAVA培训 > 获取Hibernate关联关系的方法

获取Hibernate关联关系的方法

JAVA培训

本文向大家介绍获取Hibernate关联关系的方法,可能好多人还不了解Hibernate关联关系,没有关系,看完本文你肯定有不少收获,希望本文能教会你更多东西。

获取Hibernate关联关系的pojo。我是指例如一个User(用户)拥有一个many-to-one的属性Unit(单位),但是有时有些用户的Unit属性为空,如果按单位查询用户的时候那些单位为null的用户就会被遗漏,如何调取呢?这本来是很简单的,但是我想当然的使用了Restriction.eq,但是不行,后来看了手册才发现应该使用Restrictions.isNul。

下面是Test代码:


public void getUsersWhosUnitIsNullByRestrictionsEqNullUnit() {  
DetachedCriteria dc = DetachedCriteria.forClass(User.class);  
dc.add(Restrictions.eq("unit", null));  

Criteria cri = dc.getExecutableCriteria(session);  
log.debug("getUsersWhosUnitIsNullByRestrictionsEqNullUnit():" + cri.list().size());  
}  

/** *//**  
* 为了获取一个unit为null的用户,如果传入一个id为null的Unit实例则会报错,无法翻译为SQL  
* 错误类型为:org.hibernate.TransientObjectException  
* 这也不是我们所期望的结果  
*/  
@Ignore  
@Test(expected=TransientObjectException.class)  
public void getUsersWhosUnitIsNullByRestrictionsEqUnitNullId() {  
Unit unit = new Unit();  
log.debug(unit.getId());  
DetachedCriteria dc = DetachedCriteria.forClass(User.class);  
dc.add(Restrictions.eq("unit", unit));  

Criteria cri = dc.getExecutableCriteria(session);  
log.debug("getUsersWhosUnitIsNull():" + cri.list().size());  
}  

/** *//**  
* 为了获取一个unit为null的用户正确的方法应该是使用Restrictions.isNull方法  
* 因为执行的SQL为:(select * ) from USER_INF this_ where this_.UNIT_ID is null  
* 这才是我们所希望的结果  
*/  
@Test  
public void getUsersWhosUnitIsNullByRestrictionsIsNull() {  
DetachedCriteria dc = DetachedCriteria.forClass(User.class);  
dc.add(Restrictions.isNull("unit"));  

Criteria cri = dc.getExecutableCriteria(session);  
log.debug("getUsersWhosUnitIsNullByRestrictionsIsNull():" + cri.list().size());  
} 

以上介绍获取Hibernate关联关系的方法。(常州java培训

本文由欣才IT学院整理发布,未经许可,禁止转载。