java - 使用 hibernate 从表中获取最大数量

标签 java hibernate

当我创建一个对象时,我需要查看database.object并找到表中该对象的最大键。当我找到最大数量时,我需要将其增加 1,并且我的新对象将拥有该新 key 。这些键依赖于对象类型,并且类型有很多,所以我不能使用 id。

示例:表对象

Id, Name, Type, Key
1,  One,   T1,   6
2,  Two,   T1,   3
3,  Three, T2,   88
4,  Four,  T1,   101

我面临的问题:更多的用户可以创建新对象(并且有一些计算,所以这个操作不是很快),有时两个或更多用户最终会得到相同的 key ?!

使用 jdbc,我可以使用 SELECT .. FOR UPDATE 并锁定表。

是否有任何推荐的解决方案如何使用 hibernate 来实现此目的?

谢谢

最佳答案

您需要一个 ACID operation当您在数据库中保存新值时。访问所需字段的最大数量以及新 ID 创建和提交操作的数量应该是单个单元且 Transactions提供此功能。

我不确定您的配置。您可以使用Hibernate Transactions .

您可以访问最大行值,这也有一些条件。另请参阅the docs .

public Long maxRowValue()
    {

        Criteria crit = sess().createCriteria(YourEntity.class);    
        crit.setProjection(Projections.max("Key"));
        crit.add( Restrictions.eq("Type", 1));
        List<Long> teams = crit.list(); 
        return teams.get(0);

    }

附注我不知道你的配置细节。代码应相应更改。

关于java - 使用 hibernate 从表中获取最大数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482660/

相关文章:

java - 在 Hibernate 中建模可为空复合外键?

java - 如何在 ViewPager 中使用 Fragments 隐藏和显示 FloatingActionButton?

java - 如何在 VisualForce 中设置日期格式?

java - HQL - 还记得序数参数是从 1 开始的吗?

java - JPA @UniqueConstraint 看不到列

java - 解析 Hibernate Man.hbm.xml 时出错

java - 抛出异常的 Java 方法是否有特定的命名约定?

java - 我们如何创建包含应用程序包的 war 文件?

java - 如何在运行时从 Java 接口(interface)向 json 数组添加元素

java - 从 Map 中删除实体尝试将引用清空