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,那就要注意了,一定要区分大小写。

你可能感兴趣的:(Hibernate,linux,windows)