Hibernate Sequence for Non-ID Columns
Using database sequences to generate values for non-primary key columns in Hibernate is a common requirement. Unfortunately, hibernate currently provides no built-in method for achieving this.
The @GeneratedValue annotation can only be used in conjunction with @Id to auto-generate values for primary keys. The challenge arises because Hibernate assumes that non-ID properties should be handled by the user application.
To overcome this limitation, a workaround involves creating a separate entity with an auto-generated Id. This entity then becomes responsible for generating the sequence value that can be assigned to the non-ID property in the target entity.
Consider the following example:
@Entity public class GeneralSequenceNumber { @Id @GeneratedValue(...) private Long number; } @Entity public class MyEntity { @Id private Long id; @OneToOne(...) private GeneralSequenceNumber myVal; }
In this scenario, a new instance of GeneralSequenceNumber is created, and its number field is auto-generated. This value is then assigned to the myVal property in MyEntity during entity persistence.
While this workaround adds an extra entity, it provides a solution for managing non-ID property sequences in Hibernate. Until a more seamless approach is implemented, this method offers a practical solution to this common use case.
The above is the detailed content of How Can I Generate Database Sequence Values for Non-ID Columns in Hibernate?. For more information, please follow other related articles on the PHP Chinese website!