我正在使用带有Derby数据库的Hibernate(JPA) - 我的应用服务器是Jboss 6.0。
我必须使用独立的JDBC程序预填充一个包含50000个员工信息的表。
现在,从我的应用程序中,我还需要在同一张表中即时插入新的员工信息,这时我使用JPA(因为它在应用程序容器内运行)。
我的Employee类是一个实体bean,并且具有“Id”列作为主键,其中包含“@GeneratedValue(strategy = auto)”注释,以便Hibernate确定适当的运行序列号作为主键(即Id列)。
现在的问题是,即使Employee表已经有条目,Hibernate也总是从“1”开始这个运行序列。因此,当我尝试使用Entitymanager :: persist()插入新记录时,我总是会收到违反约束的错误,例如“唯一或主键约束或唯一索引中的重复键值”。这是因为Hibernate尝试使用Id = 1插入新条目,而我已经在那个表中有一个Id = 1的条目。
我的问题是:
a)如何更新Hibernate的缓存,以便可以相应地调整“Id”列的运行序列号? 我明白它会因DB而异 - 但是否可能?
b)是否有其他方法实现相同的功能?
c)如果我编写一个独立的JPA程序来执行批量插入(即预填充),然后启动我的Jboss应用程序,Hibernate是否能够确定正确的“运行序列号”?
感谢您提前提供任何建议, - kuntal
我的Employee类是一个实体bean,并且具有“Id”列作为主键,其中包含“@GeneratedValue(strategy = auto)”注释,以便Hibernate确定适当的运行序列号作为主键(即Id列)。
现在的问题是,即使Employee表已经有条目,Hibernate也总是从“1”开始这个运行序列。因此,当我尝试使用Entitymanager :: persist()插入新记录时,我总是会收到违反约束的错误,例如“唯一或主键约束或唯一索引中的重复键值”。这是因为Hibernate尝试使用Id = 1插入新条目,而我已经在那个表中有一个Id = 1的条目。
我的问题是:
a)如何更新Hibernate的缓存,以便可以相应地调整“Id”列的运行序列号? 我明白它会因DB而异 - 但是否可能?
b)是否有其他方法实现相同的功能?
c)如果我编写一个独立的JPA程序来执行批量插入(即预填充),然后启动我的Jboss应用程序,Hibernate是否能够确定正确的“运行序列号”?
感谢您提前提供任何建议, - kuntal