我正在使用Hibernate。服务作为web服务公开。这项服务将由2个应用程序调用。该服务方法将记录保存到数据库中。使用hibernate的主键违规问题?
ServiceClass.java:
------------------
//Here Transaction will start
public void saveRecord(SampleEntity entity){
someDAO.saveData(entity);
}
SomeDao.java
-----------------
public void saveData(SampleEntity entity){
//record is saved using saveOrUpdate method
}
如果saveRecord
方法由两个应用at a time
与相同的ID调用,PK violation exception
被抛出。
这两个应用程序都在发送具有相同ID的记录。
因为我们正在使用saveOrUpdate
它应该更新记录,如果它已经存在。
您必须从数据库获取现有实体并更新其值。如果它不存在(hibernate返回null),那么你创建它。 – DominikM 2013-02-27 11:03:30
你是手动设置ID还是由Hibernate生成? – overmeulen 2013-02-27 11:05:57
我们做同样的事情,但没有用。我的直觉是,应用程序调用一个实体传递存储方法,但在将记录保存到数据库之前,第二个应用程序也会打电话保存。由于应用程序尚未插入记录,所以显然DB不会有记录。 – user1016403 2013-02-27 11:06:09