在 Hibernate JPA 中使用非 ID 列的数据库序列
当使用 Hibernate 作为 JPA 提供程序时,您可能会遇到以下需求为不属于标识符的列生成值。不幸的是,通常用于自动递增主键的 @GenerateValue 注释在这种情况下不适用。
首先,了解 Hibernate/JPA 不会自动生成非 ID 属性的值非常重要。 @GenerateValue 注解仅用于管理主键生成。相反,需要数据库生成的值。
要克服此限制,请考虑使用生成的标识符创建一个单独的实体,称为“代理键实体”。然后,可以使用 OneToOne 关系将相关非 ID 列与此代理实体相关联。
示例实现:
// Surrogate Key Entity @Entity public class SurrogateEntity { @Id @GeneratedValue(...) private Long number; } // Main Entity @Entity public class MyEntity { @Id private Long id; @OneToOne(...) private SurrogateEntity myVal; }
通过这种方法,值myVal 属性将在创建新的 MyEntity 实例时由数据库生成。此解决方法允许您利用 Hibernate 的数据库生成的值处理非 ID 列的功能。
以上是如何在 Hibernate JPA 中为非 ID 列生成数据库序列?的详细内容。更多信息请关注PHP中文网其他相关文章!