Hibernate JPA序列(非Id)對于某些不是標(biāo)識符/不是復(fù)合標(biāo)識符一部分的列,是否可以使用DB序列?我正在使用hibernate作為jpa提供程序,并且我有一個表有一些生成值的列(使用序列),盡管它們不是標(biāo)識符的一部分。我想要的是使用序列為實體創(chuàng)建一個新值,其中序列的列不是主鍵的一部分:@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;
}}然后,當(dāng)我這樣做:em.persist(new MyEntity());將生成id,但該mySequenceVal屬性也將由我的JPA提供程序生成。只是為了說清楚:我希望Hibernate為mySequencedValue屬性生成值。我知道Hibernate可以處理數(shù)據(jù)庫生成的值,但是我不想使用觸發(fā)器或除Hibernate之外的任何其他東西來為我的屬性生成值。如果Hibernate可以為主鍵生成值,為什么它不能為簡單屬性生成?
3 回答

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

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