我实际上在试图学习JPA,而我在使用@SequenceGenerator时遇到了一些麻烦。
我在EclipseLink中使用了derby嵌入式数据库,我试图将SequenceGenerator注释应用到Person Entity的id。
下面是我使用的代码:@SequenceGenerator with DerbyEmbedded问题
@Id
@SequenceGenerator(name="Person_SEQ", allocationSize=5, initialValue=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="Person_SEQ")
private int id;
现在的问题是,每当我启动“首次”(该应用程序,它意味着我删除先前创建的资料库,然后重试),我得到这个例外:
[EL Warning]: 2011-09-17 22:25:03.649--ServerSession(31484215)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: SEQUENCE 'PERSON_SEQ' does not exist.
Error Code: 30000
Call: VALUES(NEXT VALUE FOR Person_SEQ)
Query: ValueReadQuery(sql="VALUES(NEXT VALUE FOR Person_SEQ)")
这种行为是否正常?
_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __
我已经检查生成的createDLL.jdbc和这里给出的有关Person表的内容:
CREATE TABLE PERSON (ID INTEGER NOT NULL, FIRSTNAME VARCHAR(255), LASTNAME VARCHAR(255), NONSENSEFIELD VARCHAR(255),PRIMARY KEY (ID))
CREATE SEQUENCE Person_SEQ INCREMENT BY 5 START WITH 5
这让我想知道为什么它以5而不是1开头?
__ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __
我已经想通了也是重新启动应用程序(这次与同一数据库)时,并插入一些新的人的ID从allocationSize至今跳跃。为了让我自己清楚这里是我所经过的场景:
- 我已经插在第一次执行,这创造了从1开始ID池至29
- 在第二次执行29人(关闭应用程序和重新发起之后)我也插入29人,其中创建的id从起始池(而不是30 !!)到99
是此问题由于嵌入德比驱动程序?还是我缺少别的东西?
我即将开发的应用程序并不意味着长期使用相同的数据库,而是每个新的一年都会重新生成数据库,而且这些ID不会达到很高的水平价值观,你认为我真的需要使用长型?你的回答就是我期待的!谢谢 –