关于使用Hibernate findByExample的注意事项

findByExample是一个很便利的查询的方法,通过传入的实例,进行条件匹配生成查询语句。

但之前一直很少用这个方法,原因是之前发现不知道什么情况下查询结果跟自己想要生成的不同。还是学习方式不同吧,对于陌生的东西出现问题了就不管不用了,这样是不行了。现在又遇到了,却很快的发现问题所在了。

原因其实很简单,findByExample只为example中的[color=red][b]基本类型[/b][/color]属性生效,如果example的属性中有bean的话(一般有外键时就会出现了)就会无法转成SQL查询条件。甚至很多时候会产生where (1=1)的条件,相信会令人很迷惑。

解决办法很简单吧,遇到这种情况可以直接使用SQL或条件查询(Criteria),更推荐使用Criteria。

下面是查询参考:
	@Override
public AppsAccount findByUserAndApp(Users user, Apps app) {
final DetachedCriteria query = DetachedCriteria
.forClass(AppsAccount.class);
Criteria criteria = query.getExecutableCriteria(getSession());
criteria.add(Restrictions.eq("users", user));
criteria.add(Restrictions.eq("apps", app));

@SuppressWarnings("unchecked")
List<AppsAccount> list = criteria.list();
if (list != null && !list.isEmpty()) {
return list.get(0);
}
return null;
}


因为是跟spring整合,所以用getSession()方法传入session。

AppsAccount.class类

public class AppsAccount implements java.io.Serializable {

// Fields

/**
*
*/
private static final long serialVersionUID = 2255050572597512586L;
private String id;
private Users users;
private Apps apps;
private String account;

.....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值