@Column(name="DateOfBirth")
private Date dateOfBirth;
「DateOfBirth」という名前の列を作成するには、上記のコードが特に必要です。代わりに、Hibernateによってdate_of_birthという名前の列が表示されます。どうすればこれを変更できますか? web.xmlプロパティはありますか? DefaultNamingStrategyとImprovedNamingStrategyに出くわしましたが、どちらを指定するかわかりません。
考えられる回避策は次のとおりです。dateofbirth
という名前を付けると、DBの列にはそのような名前が付けられますが、属性名は同じである必要があります。
Hibernateは、キャメルケース形式を使用してデータベース列を作成/読み取ります。
私は以前にこの問題を抱えていました。列名「employeename」、「employeerole」、「departmentlocation」にスペースがないレガシー列を使用しました。私の豆のプロパティはすべてキャメルケースなしでなければならなかったので、私はそれを嫌います。
「_」で区切られたデータベース列は、今見たように適切にキャメルケースに使用されます。
参考:アンダースコアを挿入する理由は、おそらく ImprovedNamingStrategy を使用しているためです。 Configuration オブジェクトに設定されます。例については ここ を参照してください...
アンダースコアが必要ない場合は、名前付け戦略を設定することも、以前に発見したDefaultNamingStrategyに設定することもできません。
これを入れてみてください
application.properties
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
スプリングブーツの場合は以下のプロパティを追加してください。
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
ゲッターに@Columnアノテーションを配置します。
@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
提案された回避策は、@ Column(name = "dateofbirth")を使用することでした。これは、私の目的には有効でした。
ImprovementNamingStrategyには、tableName()およびcolumnName()から呼び出されるメソッドaddUnderscores()があり、独自の命名戦略クラスを実装して、選択に応じてこれらをオーバーライドできます。
public class MyOwnNamingStrategy extends ImprovedNamingStrategy {
@Override
public String tableName(String tableName) {
//return addUnderscores(columnName); // skip this
return columnName; // if you want column name variable name same
//return changeAsYouWant(columnName); // as name sames
}
}
100%確信はありませんが、プライベート変数ではなくgetメソッドに注釈を付ける必要はありませんか?
フィールドまたはゲッターメソッドのいずれかに注釈を付けることができますが、違いはありません。完全なhibernate.cfg.xmlまたはpersistence.xmlファイルを投稿できますか?