亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Hibernate JPA序列(非Id)

Hibernate JPA序列(非Id)

白衣非少年 2019-07-26 15:34:04
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。對我來說這是完美的解決方案,因為第二個實體是“丑陋”的選擇。


查看完整回答
反對 回復 2019-07-26
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

我知道這是一個非常古老的問題,但它首先顯示了結果,jpa自問題以來發生了很大的變化。

現在正確的方法是使用@Generated注釋。您可以定義序列,將列中的默認值設置為該序列,然后將列映射為:

@Generated(GenerationTime.INSERT)@Column(name = "column_name", insertable = false)


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 616 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號