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

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

帶一個自增的Spring JPA復合PK

帶一個自增的Spring JPA復合PK

POPMUISE 2022-12-15 16:49:37
我正在嘗試使用 Spring Boot 2.1.2.RELEASE + JPA(使用啟動器)和 MySQL (InnoDB) 來保留具有復合主鍵的實體,其中一個應該自動遞增。我有一個帶有 2 個非抽象子類的抽象類,我正在使用單表策略進行繼承。我一直在尋找如何實現這一點,但每一篇似乎都在尋找與我相同的帖子最終都沒有答案(示例)。我當前的設置如下所示(為清楚起見省略了 setter、getter 和構造函數)。@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@IdClass(MyEntityPK.class)public abstract class MyEntity {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    long pk1; //Should be auto-incremented    @Id    OffsetDateTime pk2;    //More fields...public class MyEntityPK implements Serializable {   private static final long serialVersionUID = 1L;   long pk1;   OffsetDateTime pk2;}@Repositorypublic interface MyEntityRepository extends CrudRepository<MyEntity, MyEntityPK> {   //Some methods like save().}我發現的第一個問題是表格生成。如果聲明如下,MySQL 允許創建 PKPRIMARY KEY (pk1, pk2)但不是以不同的順序PRIMARY KEY (pk2, pk1)創建表時,Hibernate 使用第二個,因此失敗。還嘗試更改字段順序但無濟于事。我認為這可能是 Hibernate 的問題,但我不確定。任何人都可以確認嗎?不管怎樣,我通過手動創建 DDL 腳本并通過 Hibernate 禁用自動 DDL 解決了這個問題。下一個問題,我沒有找到答案,是實體被正確保存在表中,但是存儲庫的保存方法返回的 id 始終為 0。我在保存之前手動設置 pk2,而保留 pk1由DB完成。entity.setPk2(OffsetDateTime.now());Entity savedEntity = repository.save(entity); //savedEntity has id 1 in table but 0 in code在調試時,我到達了這個isNew() 方法。事實證明它返回 false,因為 MyEntityPK 與 null 不同(我設置了 pk2)。這當然不是我所期望的,因為我實際上是在保存一個新實體,因為我的 PK 是復合的并且我將一個字段留空。所以,我也認為這可能是一個錯誤。有一些類覆蓋了 isNew() 方法,但它們似乎沒有被使用。我做錯了什么還是這是一個錯誤?幫助贊賞:)
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

不支持 @EmbededId 或 @IdClass 上的 @GeneratedValue(strategy = GenerationType.IDENTITY)。

這是一個與您的請求完全相關的錯誤,該錯誤被休眠https://hibernate.atlassian.net/browse/ANN-268拒絕

這是另一個更新的錯誤報告。請注意 Vlad Mihalcea 評論:

這不是一個障礙,它只是一個主要問題。例如,JPA 規范甚至沒有說明復合標識符中是否允許生成的標識符。

無論如何,這僅適用于具有基于序列的標識符的 @IdClass,如本文所述。

https://hibernate.atlassian.net/browse/HHH-9662

引文中的文章解釋了如何將 @GeneratedValue(strategy = GenerationType.SEQUENCE) 映射到復合材料上。


查看完整回答
反對 回復 2022-12-15
  • 1 回答
  • 0 關注
  • 94 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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