Spring JPA Lock多个查询(选择后跟更新)

时间:2015-06-30 23:16:39

标签: java spring jpa concurrency

我在Spring中使用JPA并拥有2个实体:

public class DocumentType {
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  private String idPrefix;
  private Integer maxNumberOfSuffixDigits;
  private Long startingSuffixNumber;
  private String nextDocId;
  ...
}

public class Document {
  @Id
  private String id;

  @ManyToOne
  @JoinColumn
  private DocumentType documentType;
  ...
}

许多文档可以映射到同一个DocumentType,并且可以有许多DocumentTypes。文档的id将使用其中对应的DocumentType中的参数组合生成,其中:idPrefix + startingSuffixNumber前缀为0以满足maxNumberOfSuffixDigits约束。目前,我是否会存储预先生成的nextDocId,但出于此问题的目的(如果它使解决方案更容易),请假设它可用。

我遇到的问题是获取nextDocId,并在并发环境中生成以下Id。我已经研究了悲观的写锁,但我不认为这可以解决这个问题,因为从我所看到的,它只能锁定一个查询。我需要一种方法以某种方式锁定两个查询:在nextDocId上选择查询,然后立即进行更新以生成新的nextDocId。

我将非常感谢有关如何实现这一目标或其他替代方案的任何建议。

0 个答案:

没有答案