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中);或者创建一个保存最大值的表,并在单独的事务中更新该表中的值