日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不同的Hibernate命名策略

發布時間:2023/12/3 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不同的Hibernate命名策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文討論了hibernate提供的不同命名策略,以及命名策略從hibernate 4中的hibernate.ejb.naming_strategy到hibernate 5中的hibernate.implicit_naming_strategy和hibernate.physical_naming_strategy的轉變。最后,我們將研究一下在Hibernate和配置中實施自定義命名策略以與Spring Boot應用程序一起運行。

Hibernate 4命名策略

Hibernate使用這些策略將Java實體和屬性名稱與相應的關系數據庫和列名稱進行映射。 在Hibernate4中,使用的命名策略是hibernate.ejb.naming_strategy。 該策略使用EJB3NamingStrategy , 改良的 NamingStrategy , DefaultComponentSafeNamingStrategy和DefaultNamingStrategy來映射名稱。 EJB3NamingStrategy是使用的默認命名策略,它提供駝峰字段和表名。在命名外鍵列時,它使用undescore(_)作為分隔符。 例如,如果您有一個名稱為table1且名稱為id和name的表,則在table2中,外鍵列將被創建為table1_id,并且此EJB3NamingStrategy實現了NamingStrategy接口。

Hibernate 5命名策略

Hibernate 5發布后,由于NamingStrategy合同通常不夠靈活以至于無法正確應用給定的命名“規則”,因此hibernate.ejb.naming_strategy不再適用。 取而代之的是,引入了兩種新策略來提供對命名策略的深度定制,它們是ImplicitNamingStrategy和PhysicalNamingStrategy。 要使用此策略,有兩個要使用的鍵:implicit_naming_strategy和physical_naming_strategy。Hibernate5僅提供了PhysicalNamingStrategy的一種實現– PhysicalNamingStrategyStandardImpl,但是提供了ImplicitNamingStrategy的幾種實現。

當您在實體定義中未明確提供數據庫名稱和列名稱時,將使用ImplicitNamingStrategy,因為PhysicalNamingStrategy可用于顯式定義實體名稱和屬性名稱與數據庫名稱和列名稱的映射規則。

隱式命名策略

當實體未明確命名其映射到的數據庫表時或當特定屬性未明確命名其映射到的數據庫列時,將使用ImplicitNamingStrategy。我們可以使用hibernate.implicit_naming_strategy配置設置指定要使用的ImplicitNamingStrategy。默認值是jpa,legacy-hbm,legacy-jpa和component-path。

物理命名策略

PhysicalNamingStrategy的想法是定義自定義命名規則,而不必通過顯式名稱將其硬編碼到映射中。以下是PhysicalNamingStrategy的一種實現,用于定義自定義表名和列名。

package com.devglan;import java.util.LinkedList; import java.util.List; import java.util.Locale;import org.hibernate.boot.model.naming.Identifier; import org.hibernate.boot.model.naming.PhysicalNamingStrategy; import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;import org.apache.commons.lang3.StringUtils;public class CustomPhysicalNamingStrategy implements PhysicalNamingStrategy {@Overridepublic Identifier toPhysicalCatalogName(Identifier name, JdbcEnvironment jdbcEnvironment) {return name;}@Overridepublic Identifier toPhysicalSchemaName(Identifier name, JdbcEnvironment jdbcEnvironment) {return name;}@Overridepublic Identifier toPhysicalTableName(Identifier name, JdbcEnvironment jdbcEnvironment) {final List parts = splitAndReplace( name.getText() );return jdbcEnvironment.getIdentifierHelper().toIdentifier(join( parts ),name.isQuoted());}@Overridepublic Identifier toPhysicalSequenceName(Identifier name, JdbcEnvironment jdbcEnvironment) {return name;}@Overridepublic Identifier toPhysicalColumnName(Identifier name, JdbcEnvironment jdbcEnvironment) {final List parts = splitAndReplace( name.getText() );return jdbcEnvironment.getIdentifierHelper().toIdentifier(join( parts ),name.isQuoted());}private LinkedList splitAndReplace(String name) {LinkedList result = new LinkedList<>();for ( String part : StringUtils.splitByCharacterTypeCamelCase( name ) ) {if ( part == null || part.trim().isEmpty() ) {continue;}result.add( part.toUpperCase( Locale.ROOT ) );}return result;}private String join(List parts) {boolean firstPass = true;String separator = "";StringBuilder joined = new StringBuilder();for ( String part : parts ) {joined.append( separator ).append( part );if ( firstPass ) {firstPass = false;separator = "_";}}return joined.toString();} }

要在Hibernate狀態下使用此自定義策略,請執行以下配置。

jpaProperties.put("hibernate.physical_naming_strategy", "com.devglan.config.CustomPhysicalNamingStrategy");

Spring Boot中的Hibernate命名策略

正如我們所討論的那樣,hibernate提供了兩種不同的命名策略,而Spring Boot使用SpringPhysicalNamingStrategy配置物理命名策略,其中所有點都由下劃線替換,并且駝峰式大寫字母由下劃線替換,并且所有表名均以小寫形式生成。例如,USERDETAILS實體映射到user_details表。

如果要使用上面實現的自定義命名策略,則可以在application.properties中進行以下配置。

spring.jpa.hibernate.naming.physical-strategy=com.devglan.config.CustomPhysicalNamingStrategy);

結論

在本文中,我們了解了Spring Boot和Hibernate提供的不同命名策略以及實現我們自己的自定義命名策略的方法。 如果您有任何要添加或共享的內容,請在下面的評論部分中共享。

翻譯自: https://www.javacodegeeks.com/2018/03/different-hibernate-naming-strategy.html

總結

以上是生活随笔為你收集整理的不同的Hibernate命名策略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。