Java 在SQL查询中使用未提交的值

Java 在SQL查询中使用未提交的值,java,hibernate,transactions,commit,Java,Hibernate,Transactions,Commit,在某些函数(此处简化)中,我有如下内容: public void transfertOrganisms(Organism firstOrganism, Organism secondOrganism){ firstOrganism.setMetaExercice(DaoHelper.getMaxMetaExercieId("organisme") + 1); HibernateUtil.getCurrentSession().saveOrUpdate(firstOrganism);

在某些函数(此处简化)中,我有如下内容:

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);
}
在daoheloper.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;
}

现在,由于事务尚未提交,
daoheloper.getMaxMetaexerceid(“Organime”)
将始终返回相同的值。不必自己管理currentMax(比如创建一个全局变量或其他东西),有没有办法使用表中未提交的值?

不幸的是,如果同时可以执行更新有机体表的其他事务,那么您不仅会在该事务中遇到这些行的id问题(例如,如果应用程序的其他用户同时创建有机体行),我使用了两种解决方案:使用“自动递增”列(
auto_increment
,在MySQL和MSSQL中);或者创建一个保存最大值的表,并在单独的事务中更新该表中的值