【发布时间】:2014-09-19 21:37:13
【问题描述】:
在某些功能(此处简化)中,我有这样的东西:
public void transfertOrganisms(Organism firstOrganism, Organism secondOrganism){
firstOrganism.setMetaExercice(DaoHelper.getMaxMetaExercieId("organisme") + 1);
HibernateUtil.getCurrentSession().saveOrUpdate(firstOrganism);
secondOrganism.setMetaExercice(DaoHelper.getMaxMetaExercieId("organisme") + 1);
HibernateUtil.getCurrentSession().saveOrUpdate(secondOrganism);
}
在 DaoHelper.java 中
public static int getMaxMetaExercieId(String tableName) {
Query query;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
query = session.createSQLQuery("SELECT MAX(META_EXERCICE_ID) FROM " + tableName);
Integer max = (Integer) query.uniqueResult();
tx.commit();
if (max == null)
return 0;
return max;
}
现在,由于事务尚未提交,DaoHelper.getMaxMetaExercieId("organisme") 将始终返回相同的值。无需自己管理 currentMax(例如制作全局变量或其他东西),有没有办法使用表的未提交值?
【问题讨论】:
标签: java hibernate transactions commit