31
@Column(name="DateOfBirth")
private Date dateOfBirth;

「DateOfBirth」という名前の列を作成するには、上記のコードが特に必要ですが、Hibernate は date_of_birth という名前の列を提供します。どうすればこれを変更できますか? web.xml プロパティはありますか? DefaultNamingStrategy と ImprovementNamingStrategy に出くわしましたが、どちらか一方を指定する方法がわかりません。

4

9 に答える 9

34

参考までに: アンダースコアを挿入する理由は、おそらく ImprovementNamingStrategy を使用しているためですConfigurationオブジェクトに設定されています。例については、こちらを参照してください...

アンダースコアが必要ない場合は、命名戦略を設定しないか、以前に発見した DefaultNamingStrategy に設定することができます。

于 2008-12-17T22:38:22.893 に答える
12

考えられる回避策は次のとおりです。名前を付けるとdateofbirth、DBの列にそのような名前が付けられますが、属性名は同じである必要があります。

Hibernateは、キャメルケース形式を使用してデータベース列を作成/読み取ります。

私は以前にこの問題を抱えていました。列名「employeename」、「employeerole」、「departmentlocation」にスペースがないレガシー列を使用しました。私の豆のプロパティはすべてキャメルケースなしでなければならなかったので、私はそれを嫌います。

「_」で区切られたデータベース列は、今見たようにキャメルケースを適切に使用するために使用されます。

于 2008-12-17T22:26:54.447 に答える
7

ゲッターに @Column アノテーションを付けます。

@Column(name="DateOfBirth")
public Date getDateOfBirth() {
...
}
于 2008-12-17T21:40:00.763 に答える
5

提案された回避策は、@Column(name="dateofbirth") を使用することでした。これは私の目的に適していました。

于 2008-12-17T22:14:21.850 に答える
5

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
       }
   }
于 2012-10-15T16:36:40.943 に答える
1

フィールドまたはゲッターメソッドのいずれかに注釈を付けることができますが、違いはありません。完全なhibernate.cfg.xmlまたはpersistence.xmlファイルを投稿できますか?

于 2008-12-17T22:02:17.647 に答える
0

100% 確信があるわけではありませんが、プライベート変数ではなく get メソッドに注釈を付ける必要はありませんか?

于 2008-12-17T21:32:45.833 に答える