【发布时间】:2018-06-27 19:46:38
【问题描述】:
我收到以下 eclipselink 错误:
我有一个带有 JPA SequenceGenerator 的实体,在单元中,如果连接的用户很少,用户测试它可以正常工作,但如果用户并发量更大,则随机出现以下错误:
org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLIntegrityConstraintViolationException:
ORA-00001: unique constraint violated Error Code: 1 Call: INSERT INTO LIST_DOCUMENT (COD_LIST_DOC, APPLY, COD_DOC, COD_REPO, NAME, ROUTE_REPO, SINI_SOL_SAI_SOLICIT, SINIESTRO_FEC_REP) VALUES (?,?,?,?,?, ?,?,?)
在其他项目中,我看到过使用触发器、停用缓存、简单重新部署或使用 sql 语句从 BD 读取序列的类似情况的解决方案,但我问是否有人有任何其他想法,因为通过正常的 jpa 操作这不应该发生。
这很严重,因为它会影响我们的验收测试。
这是id的注解。
@Id
@Column(name = "COD_LIST_DOC")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "secListDoc")
@SequenceGenerator(name = "secListDoc", sequenceName = "SEC_LIS_DOCUMENTO", initialValue = 1, allocationSize = 1)
private BigDecimal codListDoc;
这是序列的.sql
CREATE SEQUENCE "INDEMNITY". "SEC_LIS_DOCUMENT" MINVALUE 1 MAXVALUE 999999999999999 INCREMENT BY 1 START WITH 261 NOCACHE ORDER NOCYCLE;
这是序列的下一个值:
select SEC_LIS_DOCUMENTO.nextval from dual; 它返回 -> 261
在表格中插入的对象 id 是 260。
Eclipselink 版本: org.eclipse.persistence org.eclipse.persistence.jpa 2.6.4
我正在使用:
- Weblogic 版本 12.1.1.0.12
- jdk 1.7
- Oracle 11.2.0.3
作为附加信息,它是一个作为父亲级联子级持续存在的列表
em.persist (obj);
@OneToMany (mappedBy = "SiniestrolistaDocumentoSiniestroFk", cascade = CascadeType.PERSIST)
@PodamExclude
private List <Document List> SinStroFkesDocument list;
【问题讨论】:
标签: oracle jpa sequence cascade unique-constraint