gpt4 book ai didi

java - 在 SQL 查询中使用非提交值

转载 作者:行者123 更新时间:2023-12-01 12:42:08 26 4
gpt4 key购买 nike

在某些函数(此处简化)中,我有这样的东西:

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 (例如创建全局变量或其他东西),有没有办法使用表的非提交值?

最佳答案

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

关于java - 在 SQL 查询中使用非提交值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24999652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com