第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

帶一個(gè)自增的Spring JPA復(fù)合PK

帶一個(gè)自增的Spring JPA復(fù)合PK

POPMUISE 2022-12-15 16:49:37
我正在嘗試使用 Spring Boot 2.1.2.RELEASE + JPA(使用啟動(dòng)器)和 MySQL (InnoDB) 來(lái)保留具有復(fù)合主鍵的實(shí)體,其中一個(gè)應(yīng)該自動(dòng)遞增。我有一個(gè)帶有 2 個(gè)非抽象子類(lèi)的抽象類(lèi),我正在使用單表策略進(jìn)行繼承。我一直在尋找如何實(shí)現(xiàn)這一點(diǎn),但每一篇似乎都在尋找與我相同的帖子最終都沒(méi)有答案(示例)。我當(dāng)前的設(shè)置如下所示(為清楚起見(jiàn)省略了 setter、getter 和構(gòu)造函數(shù))。@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().}我發(fā)現(xiàn)的第一個(gè)問(wèn)題是表格生成。如果聲明如下,MySQL 允許創(chuàng)建 PKPRIMARY KEY (pk1, pk2)但不是以不同的順序PRIMARY KEY (pk2, pk1)創(chuàng)建表時(shí),Hibernate 使用第二個(gè),因此失敗。還嘗試更改字段順序但無(wú)濟(jì)于事。我認(rèn)為這可能是 Hibernate 的問(wèn)題,但我不確定。任何人都可以確認(rèn)嗎?不管怎樣,我通過(guò)手動(dòng)創(chuàng)建 DDL 腳本并通過(guò) Hibernate 禁用自動(dòng) DDL 解決了這個(gè)問(wèn)題。下一個(gè)問(wèn)題,我沒(méi)有找到答案,是實(shí)體被正確保存在表中,但是存儲(chǔ)庫(kù)的保存方法返回的 id 始終為 0。我在保存之前手動(dòng)設(shè)置 pk2,而保留 pk1由DB完成。entity.setPk2(OffsetDateTime.now());Entity savedEntity = repository.save(entity); //savedEntity has id 1 in table but 0 in code在調(diào)試時(shí),我到達(dá)了這個(gè)isNew() 方法。事實(shí)證明它返回 false,因?yàn)?MyEntityPK 與 null 不同(我設(shè)置了 pk2)。這當(dāng)然不是我所期望的,因?yàn)槲覍?shí)際上是在保存一個(gè)新實(shí)體,因?yàn)槲业?PK 是復(fù)合的并且我將一個(gè)字段留空。所以,我也認(rèn)為這可能是一個(gè)錯(cuò)誤。有一些類(lèi)覆蓋了 isNew() 方法,但它們似乎沒(méi)有被使用。我做錯(cuò)了什么還是這是一個(gè)錯(cuò)誤?幫助贊賞:)
查看完整描述

1 回答

?
白豬掌柜的

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊

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

這是一個(gè)與您的請(qǐng)求完全相關(guān)的錯(cuò)誤,該錯(cuò)誤被休眠https://hibernate.atlassian.net/browse/ANN-268拒絕

這是另一個(gè)更新的錯(cuò)誤報(bào)告。請(qǐng)注意 Vlad Mihalcea 評(píng)論:

這不是一個(gè)障礙,它只是一個(gè)主要問(wèn)題。例如,JPA 規(guī)范甚至沒(méi)有說(shuō)明復(fù)合標(biāo)識(shí)符中是否允許生成的標(biāo)識(shí)符。

無(wú)論如何,這僅適用于具有基于序列的標(biāo)識(shí)符的 @IdClass,如本文所述。

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

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


查看完整回答
反對(duì) 回復(fù) 2022-12-15
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)