私は、Spring Data JPAとHibernate(Springブートのこのバージョンでは4.3.11.Final)でSpring Boot 1.3.5 POCを作成しました。バックエンドデータベースはMicrosoft SQL Serverで、データベースオブジェクトの標準命名規則はパスカル(例:MySchema.MyTable.MyColumn)です。私はjavax.persistence.Tableとjavax.persistence.Columnアノテーションを使用して名前を設定し、spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.EJB3NamingStrategyを自分のapplication.propertiesファイルに追加しました。Springのブート1.3から1.4、Hibernate 4から5、Pascalのケースの問題
すべてが完全に機能しました。私はSpring Boot 1.3.6にも問題なくアップデートしました。
今、私はHibernate 5.0.9.Finalを使用するSpring Boot 1.4.0.RELEASEに移りました。そして、spring.jpa.hibernate.naming-strategyプロパティは、spring.jpa.hibernate.naming.strategyのために廃止されました。 。私はそのプロパティ名を変更しましたが、EJB3NamingStrategy値は残しました。
- org.springframework.boot.orm.jpa.EntityScan
- org.springframework.boot.context.webをorg.springframework.boot.autoconfigure.domain.EntityScanする:私はまた、他の非推奨の要素を変更しました。 (私のテストクラス内)org.springframework.boot.test.context.SpringBootTestにSpringBootServletInitializer org.springframework.boot.web.support.SpringBootServletInitializer へ
- org.springframework.boot.test.SpringApplicationConfiguration今
生成されたSQLはデフォルトのcamel casを使用しますeはEJB3NamingStrategyで持っていたパスカルのケースではなく命名規則を強調しています。
//application.properties
spring.data.jpa.repositories.enabled=true
spring.data.solr.repositories.enabled=false
spring.data.mongodb.repositories.enabled=false
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.EJB3NamingStrategy
#spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy
//hibernate.properties
hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
hibernate.format_sql=true
//Principal.java
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import org.hibernate.envers.AuditTable;
import org.hibernate.envers.Audited;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Entity
@Table(name="Principal", schema="Security")
@Audited
@AuditTable(value = "Principal", schema = "Audit")
public class Principal {
private static final Logger LOG = LoggerFactory.getLogger(Principal.class);
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Id",
nullable = false)
private Long id;
@Column(name = "Username",
nullable = false,
unique = true)
@Size(min = 1, max = 64)
private String name;
@Column(name = "FirstName",
nullable = false)
@Size(min = 1, max = 64)
private String firstName;
@Column(name = "LastName",
nullable = false)
@Size(min = 1, max = 128)
private String lastName;
@Column(name = "IsEnabled",
nullable = false)
private boolean enabled;
//getters/setters omitted for brevity
}
のorignalのコンソール出力:
Hibernate:
select
principal0_.Id as Id1_8_,
principal0_.IsEnabled as IsEnable2_8_,
principal0_.FirstName as FirstNam3_8_,
principal0_.LastName as LastName4_8_,
principal0_.Username as Username5_8_
from
Security.Principal principal0_
where
principal0_.Username=?
新しいコンソール出力:
Hibernate:
select
principal0_.id as id1_7_,
principal0_.is_enabled as is_enabl2_7_,
principal0_.first_name as first_na3_7_,
principal0_.last_name as last_nam4_7_,
principal0_.username as username5_7_
from
security.principal principal0_
where
principal0_.username=?
2016-08-05 09:19:22.751 WARN 5032 --- [ XNIO-2 task-8] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 207, SQLState: S0001
2016-08-05 09:19:22.751 ERROR 5032 --- [ XNIO-2 task-8] o.h.engine.jdbc.spi.SqlExceptionHelper : Invalid column name 'is_enabled'.
2016-08-05 09:19:22.768 ERROR 5032 --- [ XNIO-2 task-8] io.undertow.request : UT005023: Exception handling request to /springbootsecurity/login
私は広範囲に検索し、ImplicitNamingStrategyとPhysicalNamingStrategyへの参照を見つけました。それらを差し込んでも機能していないようで、おそらく正しいアプローチではありません。私は自分自身のNamingStrategyを作成することにも言及しました。それは私が取らなければならないルートですか?
@Tableと@Columnアノテーションで提供する正確な名前を使用するHibernate 5の設定はありますか? 注釈を定義する方法に問題はありますか?
[Hibernate 5.1.xネーミング戦略(Hibernate 4.xと下位互換性があります)]の可能な複製](http://stackoverflow.com/questions/37062675/hibernate-5-1-x-naming-strategy-backward- hibernate-4-xと互換性があります) –
@AmanTuladharまず、私の複製についての謝罪。私は何時間もの検索の後に答えを見つけることができませんでした。第二に、あなたが提供したリンクは、最終的に私を答えに導いたものへのリンクを持っていました。どうもありがとう!答えは以下の通りです。私はそれが簡単だとは信じられません。 –