我遇到了休眠问题,我在通话时遇到了约束违规异常,我只想打电话给'选择'。
return getHibernateTemplate().execute(new HibernateCallback<List<HibernateObject>>() {
@Override
public List<HibernateObject> doInHibernate(Session session) {
Criteria criteria = session
.createCriteria(HibernateObject.class)
.add(eq("myobject.id", id));
return criteria.list();
}
});
同样针对相关对象,更新调用不是HibernateObject
。
如何在没有明确调用的情况下找出更新发生的原因?
答案 0 :(得分:2)
默认情况下,hibernate使用FlushMode.AUTO,这意味着:
在查询执行之前,有时会刷新会话,以确保查询永远不会返回失效状态。
具有脏状态的实体必须附加到您的会话中,Hibernate会在执行查询之前将其保留。
答案 1 :(得分:1)
您可以使用StatelessSession或clear会话来将实体分离到持久性上下文。
清除:彻底清除会话。退出所有已加载的实例并取消所有挂起的保存,更新和删除。不要 关闭打开的迭代器或ScrollableResults的实例。
StatelessSession :无状态会话不实现第一级缓存,也不与任何二级缓存交互,也不会 它实现事务性后写或自动脏检查, 操作也不会级联到关联的实例。收藏品是 无国籍会话忽略了。通过无国籍人员执行的操作 会话绕过Hibernate的事件模型和拦截器。无状态 由于缺少a,会话容易受到数据别名效应的影响 第一级缓存。
对于某些类型的事务,可以执行无状态会话 比有状态会话稍快。