日期:2014-05-19  浏览次数:20704 次

hibernate 自动建表问题
用的jpa的注解,@Column(name = "`userId`"),为什么生成的表的字段就成了user_id了,怎么让生成userId
------最佳解决方案--------------------
NamingStrategy这个策略会把大写转成小写并且前加_为了骗过他
@Column(name="userid")这么写。数据库的userId和userid都是一样的。而且hibernate在发sql的时候也是都转换成小写的。
------其他解决方案--------------------
简单来说,用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的结贴率很勉强啊...

------其他解决方案--------------------
哦,抱歉,原来的类写的是YourNamingStrategy 
到了hibernate配置时忘记了写成了MyNamingStrategy

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