1

entitymanagerがフィールド名とまったく同じ大文字小文字を使用できるようにするために、これらすべての@Columnアノテーションをエンティティに入れる必要がないようにpersistence.xmlを構成するにはどうすればよいですか。ログファイルを調べると、デフォルトではすべてのフィールド名が大文字になっています。

  @Entity
  @Table(name="INDICATE", schema="inet")
  public class Indicate implements Serializable {

      private static final long serialVersionUID = 1L;
      @Id 
      @GeneratedValue(strategy=GenerationType.IDENTITY)
      @Column(name="indID", insertable = false, nullable=false, unique=true) private Long indID;
      @Column(name="prditmNO") private String prditmNO;
      @Column(name="indREASON") private Integer indREASON;
      @Column(name="indIP") private String indTCPIP;

ありがとうございました。

4

2 に答える 2

3

org.hibernate.cfg.NamingStrategyHibernateでその要件に合わせて独自に実装できます。org.hibernate.cfg.ImprovedNamingStrategy最も簡単な方法は、テーブルと列の命名規則に影響を与えるすべてのメソッドをオーバーライドして実装することです。

public class CaseSensitiveNamingStrategy extends ImprovedNamingStrategy {

    @Override
    public String tableName(String name){
        return name;
    }

    @Override
    public String columnName(String name){
        return name;
    }

}

オーバーライドしたいメソッドが他にもある可能性があることに注意してください。このクラスの詳細については、JavaDocsを参照してください。

カスタムNamingStrategy実装をHibernateに登録することを忘れないでください。これは、を作成するときにプログラムで実行できますSessionFactory

Configuration config = new AnnotationConfiguration().configure();
config.setNamingStrategy(new CaseSensitiveNamingStrategy());
SessionFactory sessionFactory = config.buildSessionFactory();

または、宣言型の方法を使用してNamingStrategy、プロパティを実装hibernate.ejb.naming_strategyの完全修飾クラス名に設定するカスタムを次のように登録できます。NamingStrategy

<property name="hibernate.ejb.naming_strategy"
          value="stackoverflow.CaseSensitiveNamingStrategy"/>
于 2012-10-02T12:49:24.193 に答える
2

JPA 2.0を使用している場合、仕様には次のように記載されています。

<delimited-identifiers/>オブジェクト/リレーショナルxmlマッピングファイルのpersistence-unit-defaults要素内の要素を指定することにより、永続性ユニットに使用されているすべてのデータベース識別子を区切り識別子として扱うように指定できます。要素が指定されている場合 <delimited-identifiers/>、それをオーバーライドすることはできません。

于 2012-10-03T15:04:36.897 に答える