使用hibernate查询要注意的问题

1,有时复杂查询时要使用到别名,

创建别名时,一定要使用

JoinType.LEFT_OUTER_JOIN

例如:

CriteriaHelper criteriaHelper = CriteriaHelper.getInstance(response.getCriteria());
                criteriaHelper.createAlias("agentList", "agentList2", JoinType.LEFT_OUTER_JOIN);//,JoinType.LEFT_OUTER_JOIN 不能少
                

否则,当关联的中间表没有记录时,就查不到当前实体类记录

2,使用Restrictions.ne 或 not like时,

注意,当值为null,不会走上述流程,

解决方法:增加 is null的判断

criteriaHelper.nOTlike(Constant2.COLUMN_ACCEPT_AGENT_IDS, Constant2.agent_in_grab_prefix + agentId)
                        .or(Restrictions.ne("agentType", EGrabAgentType.RANDOM_AGENT.getType())
                                , Restrictions.isNull("agentList2.id")
                                , Restrictions.ne("agentList2.id", agentId));

3,如果对象是只读的,

该对象是persist 对象时,使用update,不会更新,

例外情况是:该实体类有多对多的成员变量,例如:

要更新 GrabOrder,GrabOrder中有成员变量:

hibernate 的三种状态:

detached——persistent——transient
evict() 实际上是把 persistent 变为detached
transient:add之前的状态,add之后,就是persistent态,
detached 脱管的(脱离管理的)

 

4,如何把只读对象变为可更新的

//解决抢单时,抢单订单无法更新的问题
        this.grabOrderDao.setReadOnly(grabOrder, false);

原始方法是:

super.getCurrentSession().setReadOnly(entityOrProxy, readOnly);

 

5.Session is closed

原因可能有如下几种:

(1)检查方法是否在txManager 中进行了配置:

参考:

http://hw1287789687.iteye.com/blog/2221116

http://hw1287789687.iteye.com/blog/2247453

转载于:https://my.oschina.net/huangweiindex/blog/1792065

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值