【发布时间】:2011-01-11 02:04:57
【问题描述】:
我使用 Hibernate (JPA) 和 Derby 数据库 - 我的应用服务器是 Jboss 6.0。 我必须用 50000 个员工信息预先填充一个表,为此我使用了一个独立的 JDBC 程序。 现在从我的应用程序中,我还需要在同一张表中即时插入新的员工信息,当时我使用 JPA(因为它在应用程序容器中运行)。
我的 Employee 类是一个实体 bean,并且具有“Id”列作为主键,并带有“@GeneratedValue(strategy = auto)”注释,以便 Hibernate 找出主键(即 Id 列)的适当运行序列号。
现在的问题是 Hibernate 总是从“1”开始这个正在运行的序列,即使 Employee 表已经有条目。因此,当我尝试使用 Entitymanager::persist() 插入新记录时,从应用程序中,我总是收到 constrain violation 错误,例如“在唯一或主键约束或唯一索引中重复键值”。 这是因为休眠尝试插入具有 Id =1 的新条目,因为我在该表中已经有一个 Id = 1 的条目。
我的问题是
a) 如何更新 Hibernate'e 缓存,以便可以相应地调整“Id”列的运行序列号? 我知道它会因数据库而异 - 但有可能完全吗?
b) 还有其他方法可以达到同样的效果吗?
c) 如果我编写一个独立的 JPA 程序来进行批量插入(即预填充)然后启动我的 Jboss 应用程序,hibernate 是否能够确定正确的“运行序列号”?
提前感谢您的任何建议, - 昆塔尔
【问题讨论】: