0

我有一个连接查询,我想将它作为休眠条件放入我的程序中。

select a.accountName,a.username,b.name from Account as a , User as b 
where a.id=b.accountId and b.name like '%abc%' and a.username like '%def%'

我的标准是这样的:

Criteria userCriteria = session.createCriteria(User.class);
DetachedCriteria accountCriteria = DetachedCriteria.forClass(Account.class);
accountCriteria .add(Restrictions.like("name", "%" + def+ "%"));    
accountCriteria.setProjection(Projections.property("id"));
userCriteria.add(Property.forName("accountId").in(accountCriteria));    
userCriteria.add(Restrictions.eq("username", "%" + abc+ "%"));

List tmpList = userCriteria.setProjection(Projections.rowCount()).list();               
userCriteria.setMaxResults(pageSize);
result = userCriteria.list();   

列表 tmpList 显示为空。我可以列出之前的所有数据:

List tmpList = userCriteria.setProjection(Projections.rowCount()).list();

这条线有什么问题?

4

1 回答 1

0

在查询的 where 子句中,您向我们展示了您所写的:

b.name like '%abc%' 
a.username like '%def%'

但在代码中你的写作:

Restrictions.like("name", "%" + def+ "%")
Restrictions.eq("username", "%" + abc+ "%")

如果我没记错的话,这会创建一个这样的地方:

a.name like '%def%' 
b.username == '%abc%'

萨拉约格

于 2013-08-26T07:35:49.320 回答