欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Data JPA自動(dòng)生成表時(shí)列順序混亂的最新解決辦法

 更新時(shí)間:2024年11月28日 09:16:55   作者:程序猿DD  
文章主要介紹了Spring Boot 3.3.5版本中SpringDataJPA自動(dòng)生成表時(shí)列順序混亂的問(wèn)題,以及如何通過(guò)替換Hibernate實(shí)現(xiàn)來(lái)解決這個(gè)問(wèn)題,感興趣的朋友跟隨小編一起看看吧

最近把Spring Boot的版本升級(jí)到了3.3.5,突然發(fā)現(xiàn)一個(gè)問(wèn)題:當(dāng)使用Spring Data JPA自動(dòng)生成表的時(shí)候,所產(chǎn)生的列順序與Entity類中的變量順序不一致了。比如,有一個(gè)下面這樣的Entity:

@Data
@Entity(name = "t_config")
@EntityListeners(AuditingEntityListener.class)
public class Config {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(length = 20)
    private String itemKey;
    @Column(length = 200)
    private String itemValue;
    @Column(length = 200)
    private String itemDesc;
    @CreatedDate
    private Date createTime;
    @LastModifiedDate
    private Date modifyTime;
}

實(shí)際自動(dòng)創(chuàng)建出來(lái)的是這樣的:

自動(dòng)創(chuàng)建的表結(jié)構(gòu)中各個(gè)列與Entity類中的變量順序不一致。其實(shí)該問(wèn)題是一個(gè)老生常談的問(wèn)題了,在DD這次升級(jí)的工程里是有做過(guò)解決方案的。只是升級(jí)了Spring Boot版本之后,之前的解決方案失效了。

搜索了一番,同時(shí)還問(wèn)了一下AI,發(fā)現(xiàn)給出的方案還都是老的解決方案,所以今天特別寫一篇來(lái)記錄下新版本之下,要如何解決這個(gè)問(wèn)題。如果您剛好遇到類似的問(wèn)題,可以參考本文來(lái)解決。

老版本解決方案

新老版本的解決思路是類似的,都是替換Hibernate的實(shí)現(xiàn),下面是老版本的解決步驟:

  • 在工程中新建org.hibernate.cfg
  • 找到hibernate-core包下的org.hibernate.cfg下的PropertyContainer類,復(fù)制到本工程的org.hibernate.cfg包下
  • PropertyContainer類中定義的persistentAttributeMap類型從TreeMap修改為LinkedHashMap

新版本解決方案

雖然之前的方案失效了,但思路應(yīng)該還是對(duì)的,所以第一反應(yīng)是看看當(dāng)前版本下的PropertyContainer類,具體如下(省略了一些不重要的內(nèi)容):

package org.hibernate.boot.model.internal;
//省略...
public class PropertyContainer {
    private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, PropertyContainer.class.getName());
    /**
     * The class for which this container is created.
     */
    private final XClass xClass;
    private final XClass entityAtStake;
    /**
     * Holds the AccessType indicated for use at the class/container-level for cases where persistent attribute
     * did not specify.
     */
    private final AccessType classLevelAccessType;
    private final List<XProperty> persistentAttributes;
	//省略...
}

可以看到有兩個(gè)重要變化部分:

  • PropertyContainer類的包名從org.hibernate.cfg改到了org.hibernate.boot.model.internal
  • 之前的TreeMap<String XProperty> persistentAttributeMap變量沒有了,但多了一個(gè)List<XProperty> persistentAttributes。進(jìn)一步觀察這個(gè)新變量的處理過(guò)程,可以看到如下邏輯:

所以,新版的方案就以下兩個(gè)步驟:

  • 在工程中新建org.hibernate.boot.model.internal
  • 找到hibernate-core包下的org.hibernate.boot.model.internal下的PropertyContainer類,復(fù)制到本工程的org.hibernate.boot.model.internal包下
  • PropertyContainer類中,上面圖中紅色圈出部門定義的localAttributeMap = new TreeMap<>();修改為localAttributeMap = new LinkedHashMap<>();

到這里,在新版本中的這個(gè)問(wèn)題就解決了。如果你也遇到了類似的問(wèn)題,希望本文對(duì)你有所幫助。

到此這篇關(guān)于Spring Data JPA自動(dòng)生成表時(shí)列順序混亂的解決辦法最新版的文章就介紹到這了,更多相關(guān)Spring Data JPA自動(dòng)生成表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java JDK1.7對(duì)字符串的BASE64編碼解碼方法

    Java JDK1.7對(duì)字符串的BASE64編碼解碼方法

    今天小編就為大家分享一篇Java JDK1.7對(duì)字符串的BASE64編碼解碼方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • spring boot里增加表單驗(yàn)證hibernate-validator并在freemarker模板里顯示錯(cuò)誤信息(推薦)

    spring boot里增加表單驗(yàn)證hibernate-validator并在freemarker模板里顯示錯(cuò)誤信息(推

    這篇文章主要介紹了spring boot里增加表單驗(yàn)證hibernate-validator并在freemarker模板里顯示錯(cuò)誤信息的相關(guān)資料,需要的朋友可以參考下
    2018-01-01
  • java使用CollectionUtils工具類判斷集合是否為空方式

    java使用CollectionUtils工具類判斷集合是否為空方式

    這篇文章主要介紹了java使用CollectionUtils工具類判斷集合是否為空方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java?MapStruct優(yōu)雅地實(shí)現(xiàn)對(duì)象轉(zhuǎn)換

    Java?MapStruct優(yōu)雅地實(shí)現(xiàn)對(duì)象轉(zhuǎn)換

    MapSturct?是一個(gè)生成類型安全,高性能且無(wú)依賴的?JavaBean?映射代碼的注解處理器,用它可以輕松實(shí)現(xiàn)對(duì)象轉(zhuǎn)換,下面就來(lái)和大家聊聊具體操作吧
    2023-06-06
  • java協(xié)變返回類型使用示例

    java協(xié)變返回類型使用示例

    在面向?qū)ο蟪绦蛟O(shè)計(jì)中,協(xié)變返回類型指的是子類中的成員函數(shù)的返回值類型不必嚴(yán)格等同于父類中被重寫的成員函數(shù)的返回值類型,而可以是更"狹窄"的類型
    2014-02-02
  • Java 基礎(chǔ)語(yǔ)法

    Java 基礎(chǔ)語(yǔ)法

    這篇文章主要介紹了Java 基礎(chǔ)語(yǔ)法,Java 是一門面向?qū)ο蟮慕忉屝途幊陶Z(yǔ)言,面向?qū)ο?意味著我們應(yīng)該把一個(gè) Java 程序看作一系列對(duì)象的集合,我們的工作就是構(gòu)建這些對(duì)象,并通過(guò)調(diào)用彼此的方法來(lái)讓各種對(duì)象協(xié)同工作,解決實(shí)際的問(wèn)題,下面文章內(nèi)容需要的朋友可以參考下一
    2021-11-11
  • Java中將String轉(zhuǎn)換為char數(shù)組的三種方式

    Java中將String轉(zhuǎn)換為char數(shù)組的三種方式

    這篇文章主要介紹了三種將字符串轉(zhuǎn)換為字符數(shù)組的方法,分別是toCharArray()、charAt()和循環(huán)、getChars(),每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn),需要的朋友可以參考下
    2024-12-12
  • 解析Orika的MapperFacade 屬性賦值的使用問(wèn)題

    解析Orika的MapperFacade 屬性賦值的使用問(wèn)題

    在我們實(shí)際開發(fā)中,常常會(huì)有對(duì)象與對(duì)象之間的轉(zhuǎn)化,或者把一個(gè)對(duì)象的數(shù)據(jù)轉(zhuǎn)化到另一個(gè)數(shù)據(jù)之中,如果我們手動(dòng)的一個(gè)一個(gè)的set就會(huì)比較麻煩,代碼段看起來(lái)也會(huì)比較長(zhǎng)。而Orika的MapperFacade就是解決這個(gè)問(wèn)題的,實(shí)現(xiàn)對(duì)象屬性的復(fù)制
    2021-12-12
  • java分割字符串多種方法(附例子)

    java分割字符串多種方法(附例子)

    這篇文章主要給大家介紹了關(guān)于java分割字符串多種方法的相關(guān)資料,Java中有多種方法可以實(shí)現(xiàn)字符串分割,文中將每張方法都給出了代碼示例,需要的朋友可以參考下
    2023-10-10
  • spring cloud oauth2 實(shí)現(xiàn)用戶認(rèn)證登錄的示例代碼

    spring cloud oauth2 實(shí)現(xiàn)用戶認(rèn)證登錄的示例代碼

    這篇文章主要介紹了spring cloud oauth2 實(shí)現(xiàn)用戶認(rèn)證登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論