我有两个实体......
档案和用户
文件有一个@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是否可能不检查非原始成员?
答案 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();