hibernate entity映射 命名规则的问题

今天在进行entity注解方式配置时,总是报错说在数据库中找不到相应的表,并且显示找不到的表都加了下划线,例如UserInfo实体中,有属性userName,那么hibernate会去在数据中找
user_info表和其中user_name属性。
而我的数据库中实际是userInfo表和属性userName。
找了好久的原因,发现是配置hibernate时候配置了命名策略,默认的是ImprovedNamingStrategy类,该类实现了NamingStrategy接口,在查看起源码中发现,如果实体类名中非首字母为大写,会在该字母前添加下划线,并在最后进行toLowerCase()操作。这样就会出现我遇到的情况。所以我自己写了一个类实现了NamingStrategy,并重写里面的方法。主要代码如下:

/**
* 这是默认的
*/
protected static String addUnderscores(String name) {
StringBuffer buf = new StringBuffer( name.replace('.', '_') );
for (int i=1; i<buf.length()-1; i++) {
if (
Character.isLowerCase( buf.charAt(i-1) ) &&
Character.isUpperCase( buf.charAt(i) ) &&
Character.isLowerCase( buf.charAt(i+1) )
) {
buf.insert(i++, '_');
}
}
return buf.toString().toLowerCase();
}

/**
* 这是我简单修改后的,其他的有些方法也可能需要修改(暂时没有发现问题,以后遇到 在进行修改吧!
*/
protected static String addUnderscores(String name) {
StringBuffer buf = new StringBuffer( name.replace('.', '_') );
//因为与同事沟通后,数据库中的大小写与实体总都保持一致,所以实体的属性
//原样返回
return buf.toString();
}


在这过程中发现一个问题,如果你的数据库在windows服务器上,那么数据库中的表名或者列名为大写或者小写都可以,因为windows对大小写不敏感,但是如果服务器是Linux,那就要注意了,一定要区分大小写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值