非 ID 列的 Hibernate 序列
在 Hibernate 中使用数据库序列为非主键列生成值是一种常见的需求。不幸的是,hibernate 目前没有提供内置方法来实现这一点。
@GenerateValue 注解只能与 @Id 结合使用来自动生成主键的值。出现这一挑战是因为 Hibernate 假定非 ID 属性应由用户应用程序处理。
为了克服此限制,解决方法包括使用自动生成的 ID 创建一个单独的实体。然后,该实体负责生成可分配给目标实体中的非 ID 属性的序列值。
考虑以下示例:
@Entity public class GeneralSequenceNumber { @Id @GeneratedValue(...) private Long number; } @Entity public class MyEntity { @Id private Long id; @OneToOne(...) private GeneralSequenceNumber myVal; }
在此场景中,将创建 GeneralSequenceNumber 的新实例,并自动生成其编号字段。然后,在实体持久化期间,将该值分配给 MyEntity 中的 myVal 属性。
虽然此解决方法添加了额外的实体,但它提供了在 Hibernate 中管理非 ID 属性序列的解决方案。在实施更加无缝的方法之前,此方法为这种常见用例提供了实用的解决方案。
以上是如何在 Hibernate 中为非 ID 列生成数据库序列值?的详细内容。更多信息请关注PHP中文网其他相关文章!