使用eclipseLink和oracle db时序列不存在异常

时间:2010-11-01 16:34:21

标签: oracle jpa sequence eclipselink

我有以下JPA实体:

@Entity
@Table(schema = "myschema")
@SequenceGenerator(schema = "myschema", name = "seqGenerator", 
                   sequenceName  = "person_s1", allocationSize = 1)
public class Person {

@Id
@GeneratedValue(generator = "seqGenerator", strategy = GenerationType.AUTO)
private long id;

抛出以下异常:

Call: DROP SEQUENCE myschema.person_s1
Query: DataModifyQuery(sql="DROP SEQUENCE myschema.person_s1")
[EL Warning]: 2010-11-01 17:21:51.051--ServerSession(10605044)--Exception [EclipseLink-    4002] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): 
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-02289: sequence does not exist

Error Code: 2289
Call: SELECT myschema.person_s1.NEXTVAL FROM DUAL
Query: ValueReadQuery(sql="SELECT myschema.person_s1.NEXTVAL FROM DUAL")

序列由EclipseLink和查询生成:

SELECT myschema.person_s1.NEXTVAL FROM DUAL

直接使用时效果很好......

任何帮助表示赞赏

关心马塞尔

2 个答案:

答案 0 :(得分:3)

  

抛出以下异常(...)

当特定数据库对象不存在时,这些跟踪是在模式创建期间生成的,因此无法删除。 EclipseLink报告 Warning (不是Error)等情况,可以忽略它们(你得到你的序列,对吧?)。

PS:为什么你使用1的分配大小,你不想从高/低优化中受益吗?

答案 1 :(得分:0)

我知道这听起来真的很傻,但无论如何它都在这里。

@Entity
@Table(schema = "myschema")
public class Person {

   @Id
   @SequenceGenerator(schema = "myschema", name = "seqGenerator", sequenceName  = "person_s1", allocationSize = 1)
   @GeneratedValue(generator = "seqGenerator", strategy = GenerationType.AUTO)
   private Long id;
}