告诉hibernate使用与sql语句的类字段相同的大小写

告诉hibernate使用与sql语句的类字段相同的大小写,hibernate,jpa,glassfish-3,Hibernate,Jpa,Glassfish 3,如何配置persistence.xml,使我不需要将所有这些@Column注释放入实体中,以便entitymanager使用与fieldname完全相同的大小写。默认情况下,当我查看日志文件时,所有字段名都是大写的 @Entity @Table(name="INDICATE", schema="inet") public class Indicate implements Serializable { private static final long serialVe

如何配置persistence.xml,使我不需要将所有这些@Column注释放入实体中,以便entitymanager使用与fieldname完全相同的大小写。默认情况下,当我查看日志文件时,所有字段名都是大写的

  @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;

谢谢。

您可以在hibernate中实现自己的
org.hibernate.cfg.NamingStrategy
。最简单的方法是重写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

记住在Hibernate中注册自定义
NamingStrategy
实现。这可以在创建
会话工厂时通过编程实现

Configuration config = new AnnotationConfiguration().configure();
config.setNamingStrategy(new CaseSensitiveNamingStrategy());
SessionFactory sessionFactory = config.buildSessionFactory();
或者,您可以使用声明式方式注册自定义
NamingStrategy
将属性
hibernate.ejb.naming_策略
设置为
NamingStrategy
实现的完整限定类名,如下所示:

<property name="hibernate.ejb.naming_strategy"
          value="stackoverflow.CaseSensitiveNamingStrategy"/>

您可以在hibernate中为该需求实现自己的
org.hibernate.cfg.NamingStrategy
。最简单的方法是重写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

记住在Hibernate中注册自定义
NamingStrategy
实现。这可以在创建
会话工厂时通过编程实现

Configuration config = new AnnotationConfiguration().configure();
config.setNamingStrategy(new CaseSensitiveNamingStrategy());
SessionFactory sessionFactory = config.buildSessionFactory();
或者,您可以使用声明式方式注册自定义
NamingStrategy
将属性
hibernate.ejb.naming_策略
设置为
NamingStrategy
实现的完整限定类名,如下所示:

<property name="hibernate.ejb.naming_strategy"
          value="stackoverflow.CaseSensitiveNamingStrategy"/>

如果您使用的是JPA 2.0,规范会说:

通过在持久化单元中指定
元素,可以指定将用于持久化单元的所有数据库标识符视为分隔标识符 持久化单元默认为对象/关系xml映射文件的元素。如果
元素已指定,无法覆盖它。

如果您使用的是JPA 2.0,规范会说明:

通过在持久化单元中指定
元素,可以指定将用于持久化单元的所有数据库标识符视为分隔标识符 持久化单元默认为对象/关系xml映射文件的元素。如果
元素被指定,它不能被重写。

我刚刚发现Glassfish没有使用hibernate。它默认使用toplink。在那里我找到了一个记事本。这是相同的程序吗?我刚刚发现Glassfish没有使用hibernate。它默认使用toplink。在那里我找到了一个记事本。那是同样的程序吗?