Java 用于创建新实体的Spring数据悲观锁

Java 用于创建新实体的Spring数据悲观锁,java,transactions,spring-data,locking,Java,Transactions,Spring Data,Locking,我们有更多的应用程序将记录写入数据库。记录可以由唯一的记录名(不是ID)标识。它们可以同时创建同一条记录,但我只希望创建一条记录。我想使用的算法应该是这样的: start transaction, lock the table check if the record with recordName is present in the table if not present: create row commit, release lock, end transaction 是否可以使用悲观锁来

我们有更多的应用程序将记录写入数据库。记录可以由唯一的记录名(不是ID)标识。它们可以同时创建同一条记录,但我只希望创建一条记录。我想使用的算法应该是这样的:

start transaction, lock the table
check if the record with recordName is present in the table
if not present: create row
commit, release lock, end transaction

是否可以使用悲观锁来确保只创建一条记录。我只发现悲观锁用于实体,而不是整个表。

将唯一索引分配给
recordName
。所以,如果一个应用程序试图插入一个同名的记录,那么Db将抛出错误。您解决了这个问题吗?我遇到了同样的问题。目前,我正在转述独特的,就像@wak786提议的一样。但第二次似乎很难看,记录应该更新,而不是创建。在释放锁后,它不会对其进行编辑,而是抛出由于数据库错误而导致的错误Constraint@sebasira不,我没有,结果是,记录名很不幸不是唯一的。我认为JPA不允许您锁定表,但是它允许您锁定实体。我使用了一种变通方法,这意味着我锁定负责将行放入表中的实体,如下所示:
entityManager.lock(myEntity,LockModeType.悲观_WRITE)