我正在使用映射到Oracle DB-Tables的一些实体。对于ID代我使用注解如下序列发生器:JPA Eclipselink错误序列号
@Id
@SequenceGenerator(name = "SEQ_RULES", sequenceName = "SEQUENZ_RULES")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_RULES")
@Column(name = "SERIALNO")
protected Long serialno;
在PROGRAMM执行我提出一个新的实例从我的实体,并希望保留此生成一个。重新启动数据库后,我通过JPA-EclipseLink获取错误的序列号,但没有通过控制台直接在数据库上。
我打开了persistence.xml中的以下属性,同时也获取了生成的语句中使用的绑定参数。
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
</properties>
例如:如果我生成我的实体的一个新实例,并希望坚持这一个,我得到2717的的SerialNo,如果我执行
SELECT SEQUENZ_RULES.NEXTVAL FROM DUAL
我得到2767的NEXTVAL。问题是,JPA生成的serialNo必须是唯一的,现在我仍然有一些这个serialNo的数据集。我得到一个例外:
java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (JASON.SYS_C0084866) violated
非是否有任何缓存通过日食影响序列生成或什么可能是这个错误?
使用的组件:
的GlassFish 3.1.1
的EclipseLink 2.3.0.v20110604-r9504
数据库:Oracle版本:Oracle数据库11g第二版11.1.0.7.0 - 64位
驱动程序:Oracle JDBC驱动程序版本:11.2.0.1.0
预先感谢
阿德姆
有没有什么好运算出来呢? – 2013-03-14 15:55:00