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,但是是采用注入的!个人感觉比较麻烦,想寻求一个注解解决这个问题!
至于你说的结贴率的问题,应该说回答的人都应该感谢的……
以后懂得感恩