使用非原始成员Hibernate findByExample

时间:2010-12-10 20:01:21

标签: hibernate orm

我有两个实体......

档案和用户

文件有一个@ManyToOne对用户的引用,在成员上有以下注释:

@ManyToOne
@JoinColumn(name="user_id")
private User user

我正在尝试使用“findByExample”方法为用户找到所有文件。

我创建了一个File实例和一个User实例(设置了用户名)。我已将User的实例添加到File实例并将其传递给“findByExample”,如下所示:

Criteria crit = getSession().createCriteria(File.class);
Example ex = Example.create(exampleInstance);
crit.add(ex);
return crit.list();

不幸的是“list()”返回我的数据库中的所有文件,而不仅仅是指定用户的文件。我检查了生成的SQL,我发现它没有检查User对象是否有任何值,只是连接表并执行“where(1 = 1)”。

在执行“findByExample”查询时,hibernate是否可能不检查非原始成员?

1 个答案:

答案 0 :(得分:1)

org.hibernate.criterion.Example班级行207中的旧TODO解释了此问题:

//TODO: get all properties, not just the fetched ones!
Object[] propertyValues = meta.getPropertyValues( entity, getEntityMode(criteria, criteriaQuery) );

我的解决方法是使用示例对象撰写Criteria(遵循原始问题):

Criteria crit = getSession().createCriteria(File.class);
Example ex = Example.create(exampleInstance);
crit.add(ex).add(Restrictions.eq("user", exampleInstance.getUser()));
return crit.list();