JPA一序列和两个应用

时间:2018-11-08 16:27:15

标签: java mysql jpa concurrency sequence

我是JPA的新手,但遇到以下问题。 我有这张桌子:

CREATE TABLE `email` (
  `Id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `IdComunicazione` VARCHAR(255) NOT NULL COMMENT 'Id della comunicazione',
  `Canale` VARCHAR(3) NOT NULL DEFAULT 'PEO' COMMENT 'Canale di posta tramite cui inviare il messaggio: PEO o PEC',
  `TipoEmail` VARCHAR(50) NOT NULL COMMENT 'Tipologia del messaggio.',
  `Destinatario` VARCHAR(45) NOT NULL COMMENT 'Destinatario del messaggio.',
  `StatoMessaggio` INT(11) NOT NULL DEFAULT '0' COMMENT 'Stato di elaborazione del messaggio: 0 = da inviare, 1 = inviato.',
  `DataInserimento` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Data in cui il messaggio e\' stato inserito in tabella.',
  `DataInvio` TIMESTAMP NULL DEFAULT NULL COMMENT 'Data in cui il messaggio e\' stato inviato.',
  `Log` VARCHAR(1000) NULL DEFAULT NULL COMMENT 'Log di errore',
PRIMARY KEY (`Id`))

此表包含MAIL_SEQ

CREATE TABLE `sequence` (
  `SEQ_NAME` VARCHAR(255) NOT NULL,
  `SEQ_COUNT` BIGINT(20) NULL DEFAULT NULL,
  PRIMARY KEY (`SEQ_NAME`)
)

使用带有实体的Spring Data的Web应用程序:

@Entity
@Table(name = "email")
public class EmailModel {

  @Id
  @GeneratedValue(strategy=GenerationType.TABLE, generator="MAIL_SEQ")
  @TableGenerator(name="MAIL_SEQ", table="SEQUENCE", pkColumnName="SEQ_NAME", valueColumnName="SEQ_COUNT", pkColumnValue="MAIL_SEQ", allocationSize=1)
  private long id;
  ...
}

以及使用EclipseLink和该实体的批次:

@Entity
public class Email implements Serializable {
private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(strategy=GenerationType.TABLE, generator="MAIL_SEQ")
  @TableGenerator(name="MAIL_SEQ", allocationSize=1)
  private String id;
  ....
}

现在,Web应用程序将插入第一行(SEQ_COUNT = 1)。

该批处理插入第二行(SEQ_COUNT = 2)。

当我尝试通过Web应用程序再次插入时

Duplicate entry '2' for key 'PRIMARY'

并且SEQ_COUNT仍为2。

如何处理这种情况?

谢谢

0 个答案:

没有答案