当我创建一个对象时,我需要查看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/