用的jpa的注解,@Column(name = "`userId`"),为什么生成的表的字段就成了user_id了,怎么让生成userId

解决方案 »

  1.   

    简单来说,用ImprovedNamingStrategy.
    但是这个类默认的NamingStrategy是return addUnderscores(XXXName);XXX可以是table,或者column等等。所以需要写个新类继承一下覆盖原来的方法如果如lz所说就用原来的名字,也就很省事了:
    public class YourNamingStrategy extends ImprovedNamingStrategy {
       //以下方法全部可以自定义
       public String classToTableName(String className) {
          return StringHelper.unqualify(className);
       }
       public String propertyToColumnName(String propertyName) {
          return propertyName;
       }
       public String tableName(String tableName) {
          return tableName;
       }
       public String columnName(String columnName) {
          return columnName;
       }
       public String propertyToTableName(String className, String propertyName) {
          return classToTableName(className) + '_'
             + propertyToColumnName(propertyName);
       }
    }
    在hibernate配置时设置这个属性就好
    Configuration cfg = new Configuration(); 
    cfg.setNamingStrategy( new MyNamingStrategy() ); 
    SessionFactory sessionFactory sf = cfg.configure().buildSessionFactory();
    如果在XML配置就不用多说了吧,就是一个bean而已了不知lz满意不? 不过貌似lz的结贴率很勉强啊...
      

  2.   

    哦,抱歉,原来的类写的是YourNamingStrategy 
    到了hibernate配置时忘记了写成了MyNamingStrategy是一个类,lz你懂得
      

  3.   

    呵呵,怎么说呢,我在提问之前用的NamingStrategy,但是是采用注入的!个人感觉比较麻烦,想寻求一个注解解决这个问题!
    至于你说的结贴率的问题,应该说回答的人都应该感谢的……
    以后懂得感恩
      

  4.   

    NamingStrategy这个策略会把大写转成小写并且前加_为了骗过他
    @Column(name="userid")这么写。数据库的userId和userid都是一样的。而且hibernate在发sql的时候也是都转换成小写的。