hibernate - 如何修改Hibernate自动生成的运行序列号?

标签 hibernate jpa jboss

我正在使用 Hibernate (JPA) 和 Derby 数据库 - 我的应用服务器是 Jboss 6.0。 我必须预先填充一个包含 50000 名员工信息的表,为此我使用了独立的 JDBC 程序。 现在,在我的应用程序中,我还需要在同一个表中动态插入新的员工信息,当时我使用 JPA (因为它在应用程序容器内运行)。

我的 Employee 类是一个实体 bean,并且“Id”列作为主键,并带有“@GenerateValue(strategy = auto)”注释,以便 Hibernate 计算出主键(即 Id 列)的适当运行序列号。

现在的问题是 Hibernate 总是从“1”开始运行序列,即使 Employee 表已经有条目。因此,当我尝试使用 Entitymanager::persist() 插入新记录时,我总是会收到 约束违规 错误,例如“唯一或主键约束或唯一索引中的重复键值”。 这是因为 hibernate 尝试插入 Id =1 的新条目,因为我在该表中已经有一个 Id = 1 的条目。

我的问题是

a) 如何更新 Hibernate 缓存,以便相应调整“Id”列的运行序列号? 我知道它会因数据库而异 - 但有可能完全吗?

b)还有其他方法可以达到同样的效果吗?

c) 如果我编写一个独立的 JPA 程序来执行批量插入(即预填充),然后启动我的 Jboss 应用程序,hibernate 是否能够确定正确的“运行序列号”?

预先感谢您的任何建议, - 昆塔尔

最佳答案

a) how can I update Hibernate'e cache so that my running serial number for "Id" column can be accordingly adjusted? I understand it will vary from DB to DB - but is it possible at all?

b) Is there any other way to achieve the same?

  • @TableGenerator

您可以使用 @TableGenerator 生成主键,它根据维护的表中的值生成下一个 id,该表维护有两个字段 tableName 及其各自的 id,并在插入后相应地更新它。

它负责维护正确的顺序,可以修改初始值等

@TableGenerator(name = "TABLE_GEN", table = "ID_GEN", pkColumnName = "GEN_NAME", valueColumnName = "GEN_VAL", pkColumnValue = "PERSON_ID", initialValue = 1, allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
private int id;

c) If I write a standalone JPA program to do the bulk insert (i.e. pre population) and then start my Jboss application, will hibernate be able to determine the right "running serial" no?

所以最后,为 - 1)应用程序和 2)独立程序创建两个生成器,使用公共(public)表来生成 id,因此在唯一或主键约束或唯一索引中不会有重复的键值。

关于hibernate - 如何修改Hibernate自动生成的运行序列号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653489/

相关文章:

java - JBoss 4.2.2.GA 到 JBoss 6.0.0.M2 的迁移和部署问题

java - PESSIMISTIC_WRITE 是否锁定了整个表?

mysql - 为什么即使我使用 'validate' Hibernate 也总是丢弃数据库中的数据?

java - Hibernate 保留起始索引为 1 而不是 0 的列表

java - 如何过滤 JPQL 查询中的子集合?

mysql - JPA 不允许实体由来自多个表的列组成?

java - 新部署后如何清理缓存?

java - java 中 .equals() 方法的假设 - 比较对象的实例或对象的状态

java - JPA:也是主键映射的外键

java - 类转换异常 : com. sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl