我是使用休眠的新手。我编写了以下代码在我的订单表中获取最大 ID。
public int getOrderMaxUID() {
Session session = sessionFactory.getCurrentSession();
String query = "SELECT max(o.UID) FROM Order o";
List list = session.createQuery(query).list();
int maxOrderUID = ((Integer) list.get(0)).intValue();
return maxOrderUID;
}
在向表中添加新记录之前,我在控制器中调用此方法。
orderService.getOrderMaxUID();
orderService.add(o);
问题:记录也被其他进程添加到我们的订单表中。因此,为了避免重复 PK 问题,我在插入记录之前从订单表中获取最大 ID。但是当其他进程添加记录时我仍然会出现以下错误
2013-04-04 09:27:24,841 WARN ["ajp-bio-8009"-exec-2] org.hibernate.util.JDBCExceptionReporter - SQL Error: 2627, SQLState: S1000
2013-04-04 09:27:24,841 ERROR ["ajp-bio-8009"-exec-2] org.hibernate.util.JDBCExceptionReporter - Violation of PRIMARY KEY constraint 'PK_Order'. Cannot insert duplicate key in object 'Order'. The duplicate key value is (1001508).
和
org.springframework.dao.DuplicateKeyException: Hibernate flushing: could not insert:
我希望休眠将 getMaxOrderId() 方法检索到的 id 存储在内存中,并在添加新记录时使用下一个数字。对此的任何帮助将不胜感激。