2016-05-06 4 views
3

私はSpringブート1.3.3.RELEASEを使用しています。デフォルトでは、SpringブートはHibernate Version 4.xを使用します。私は新しいHibernate、つまり5.1.0 FINAL(現在)を使用しようとしています。Hibernate 5.1.xの命名方法(Hibernate 4.xとの下位互換性)

私は休止状態のバージョンを上書きするので、Gradleのを使用している私は

ext['hibernate.version']="5.1.0.Final" 

が、私は戦略

spring.jpa.properties.hibernate.naming.implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl 

spring.jpa.properties.hibernate.naming.physical_strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
に名前を付けるために、以下の使用してい SpringBoot 1.3.0 support hibernate 5?

の手順に従って次の行を追加しました

私はエンティティクラスを持っています

Hibernateの4.xの上では、それは、クエリ私はHibernateが5.xのアンダースコアを使用するように命名戦略を設定するにはどうすればよい

create table AppUser (
     id bigint not null auto_increment, 
     email varchar(100) not null, 
     enabled bit not null, 
     firstName varchar(100) not null, 
     lastName varchar(100) not null, 
     middleName varchar(100), 
     password varchar(100) not null, 
     username varchar(100) not null, 
     primary key (id) 
    ) 

を実行5.xの上のクエリ

create table app_user (
     id bigint not null auto_increment, 
     email varchar(100) not null, 
     enabled bit not null, 
     first_name varchar(100) not null, 
     last_name varchar(100) not null, 
     middle_name varchar(100), 
     password varchar(100) not null, 
     username varchar(100) not null, 
     primary key (id) 
    ) 

を実行します(4.xのよう)

+0

'ext ['hibernate.version'] =" 5.1.0.Final "'で、休止状態のバージョンを5.1.0に変更してもよろしいですか?私はあなたが参照を持っているリンクの解決策がmavenのために働くが、gradleのためではないと思う。 – TheKojuEffect

+0

はい。クラスパスに休止状態の5.1.0が含まれているとき。最終的なJARファイル –

答えて

3

まずテーブル名と列名に、あなたは必要ありません org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

は何もしないので、デフォルトとしてHibernateによって使用されます。

Hibernate 5には、必要な戦略がありません。すべての戦略はJPAに準拠しています(AppUserのような名前を生成します)。だから、自分で実装する必要があります。それはNamingStrategyUtilsを使用しています。例えば

物理命名戦略

public class UnderscorePhysicalStartegy extends PhysicalNamingStrategyStandardImpl { 

    @Override 
    public Identifier toPhysicalTableName(Identifier name, JdbcEnvironment context) { 
     return context.getIdentifierHelper() 
       .toIdentifier(NamingStrategyUtils.classToName(name.getText())); 
    } 

} 

。あなたが明示的な名前

@Entity 
@Table(name = "AppUser") 
public class AppUser { 

} 

あなたはとにかくテーブル名app_userを持つことになりますを指定した場合

は、覚えておいてください。このような振る舞いを望まない場合は、暗黙的な命名戦略を使用してください。

私は命名戦略に関する研究を行っています。あなたはHibernate5NamingStrategyを参照することができます。テーブル名とカラム名には、必要なものや制約名(一意の外部キー)のようなアンダースコアを生成します。

このクラスは、名前を生成するために使用されます。HibernateNamingStrategy。命名戦略はStrategyOptionsを使用して設定することができHibernate5NamingStrategy

を使用する方法

StrategyOptions options = StrategyOptions.builder().withoutPrefixes().build(); 
Hibernate5NamingStrategy strategy = new Hibernate5NamingStrategy(options); 

他の例:

は、例えば、接頭辞(等f_)なし戦略を使用すること以外Hibernate 5 Implicit Naming Strategy

ImprovedNamingStrategy for Hibernate 5は、Hibernate 4 ImprovedNamingStrategyの挙動をシミュレートするために使用することができます。

+0

接頭辞 'f_ 'がないと、私たちには何もありません。デフォルト設定のための地獄として迷惑を掛けます。 – Airhead

+0

@Airhead私は自分の答えを更新しました。私はどのデフォルトの動作を使うのが良いかわかりません。 –

+0

廃止予定の設定オブジェクトの代わりにpersistence.xmlからそのクラスを使用できるように、前述のクラスを拡張してオプションを設定する独自のクラスを作成しました。 – Airhead