Hibernate JPA序列(非Id)對于某些不是標識符/不是復合標識符一部分的列,是否可以使用DB序列?我正在使用hibernate作為jpa提供程序,并且我有一個表有一些生成值的列(使用序列),盡管它們不是標識符的一部分。我想要的是使用序列為實體創建一個新值,其中序列的列不是主鍵的一部分:@Entity@Table(name = "MyTable")public class MyEntity {
//...
@Id //... etc
public Long getId() {
return id;
}
//note NO @Id here! but this doesn't work...
@GeneratedValue(strategy = GenerationType.AUTO, generator = "myGen")
@SequenceGenerator(name = "myGen", sequenceName = "MY_SEQUENCE")
@Column(name = "SEQ_VAL", unique = false, nullable = false, insertable = true, updatable = true)
public Long getMySequencedValue(){
return myVal;
}}然后,當我這樣做:em.persist(new MyEntity());將生成id,但該mySequenceVal屬性也將由我的JPA提供程序生成。只是為了說清楚:我希望Hibernate為mySequencedValue屬性生成值。我知道Hibernate可以處理數據庫生成的值,但是我不想使用觸發器或除Hibernate之外的任何其他東西來為我的屬性生成值。如果Hibernate可以為主鍵生成值,為什么它不能為簡單屬性生成?
3 回答

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
我發現這種方法很@Column(columnDefinition="serial")
完美,但僅適用于PostgreSQL。對我來說這是完美的解決方案,因為第二個實體是“丑陋”的選擇。

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
我知道這是一個非常古老的問題,但它首先顯示了結果,jpa自問題以來發生了很大的變化。
現在正確的方法是使用@Generated
注釋。您可以定義序列,將列中的默認值設置為該序列,然后將列映射為:
@Generated(GenerationTime.INSERT)@Column(name = "column_name", insertable = false)
添加回答
舉報
0/150
提交
取消