Java 调用session.execute(obj)之前是否应该提交hibernate事务
保存事务后,在hibernate中何时提交事务。是在我调用session.execute(obj)之前还是之后。目前我的代码看起来是这样的(仅限于必需的部分)Java 调用session.execute(obj)之前是否应该提交hibernate事务,java,transactions,hibernate-session,Java,Transactions,Hibernate Session,保存事务后,在hibernate中何时提交事务。是在我调用session.execute(obj)之前还是之后。目前我的代码看起来是这样的(仅限于必需的部分) Session Session=connector.getSession(); 事务tx=会话.beginTransaction(); 试一试{ Criteria crit=session.createCriteria(ST_CODE_SETTINGS_STORE.class).add(Restrictions.eq(“TYPE”,“is
Session Session=connector.getSession();
事务tx=会话.beginTransaction();
试一试{
Criteria crit=session.createCriteria(ST_CODE_SETTINGS_STORE.class).add(Restrictions.eq(“TYPE”,“issueno”);
List ls=crit.List();
如果(ls.size()<1){
会话.保存(st_代码\u设置\u存储);
逐出(st_代码_设置_存储);
msg=“插入”;
}
否则{
长Id=null;
ST\ U代码\设置\存储ST\ U代码\设置\存储1=ls.get(0);
Id=st_code_settings_store1.getCODE_Id();
对象o=session.get(ST_CODE\u SETTINGS\u STORE.class,Id);
ST_代码设置存储更新=(ST_代码设置存储)o;
更新(更新);
}
tx.commit();
}捕获(例外e){
如果(tx!=null){
tx.回滚();
}
System.out.println(“错误:+e.getMessage());
连接器。打印堆栈(e);
投掷e;
}最后{
session.close();
}
有时,如果我在逐出后提交,数据不会保存在数据库中。这是正确的编码方式吗
方法execute()从会话缓存中删除单个对象So
在调用execute()之前,对象应该在会话中
隐藏物因此,如果第一次保存对象,则必须保存
通过Session.save(object)调用对象。后续更新调用应
后续会话。保存或更新(对象)或会话。更新(对象)
在调用execute()从缓存中删除加载的对象之前。()
从
结束会话通常包括四个不同的阶段:
- 刷新会话
- 提交事务
- 结束会议
- 处理异常
- 会话不是线程安全的。同时工作的东西,比如HTTP 请求、会话bean或Swing Worker将导致竞争条件 如果会话实例是共享的。如果您将休眠会话保持在 您的HttpSession(这将在本章后面讨论),您应该 考虑同步对HTTP会话的访问。否则,用户 如果单击“重新加载”的速度足够快,则可以在两次单击中使用相同的会话 并发运行的线程
- Hibernate方法引发的异常 您必须回滚数据库事务并关闭会话 立即(本章后面将更详细地讨论这一点)。 如果会话已绑定到应用程序,则必须停止 应用回滚数据库事务不会使 业务对象恢复到其在项目开始时的状态 交易这意味着数据库状态和业务 对象将不同步。通常这不是问题,因为 异常是不可恢复的,您必须在之后重新开始 无论如何都要回滚
- 会话将缓存会话中的每个对象 持久状态(Hibernate监视并检查脏状态)。 如果长时间保持打开状态,或者只是加载了太多数据,那么 将不断增长,直到您获得OutOfMemoryException1 解决方案是调用clear()和execute()来管理会话缓存, 但是如果需要大量数据,则应该考虑存储过程。 行动
Session session = connector.getSession();
Transaction tx = session.beginTransaction();
try {
Criteria crit = session.createCriteria(ST_CODE_SETTINGS_STORE.class).add(Restrictions.eq("TYPE", "issueno"));
List<ST_CODE_SETTINGS_STORE> ls = crit.list();
if (ls.size() < 1) {
session.save(st_code_settings_store);
session.evict(st_code_settings_store);
msg = "insert";
}
else {
Long Id = null;
ST_CODE_SETTINGS_STORE st_code_settings_store1 = ls.get(0);
Id = st_code_settings_store1.getCODE_ID();
Object o = session.get(ST_CODE_SETTINGS_STORE.class, Id);
ST_CODE_SETTINGS_STORE update = (ST_CODE_SETTINGS_STORE) o;
session.update(update);
}
tx.commit();
} catch (Exception e) {
if (tx != null) {
tx.rollback();
}
System.out.println("Error: " + e.getMessage());
connector.printStack(e);
throw e;
} finally {
session.close();
}