1

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

  @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

你可以在 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 。

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 回答