`
34971819
  • 浏览: 4969 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

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 映射配置说明.doc

    `hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库连接细节、默认的映射策略等。 - **schema**: 定义了数据库的Schema名称...

    如何使用Hibernate Tools生成Entity Bean

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式处理数据库操作。为了简化开发过程,Hibernate提供了一款名为Hibernate Tools的插件,这款插件集成了多种功能,...

    Hibernate逆向生成entity和hbm.xml文件

    1. 字段命名规则:生成的实体类属性名可能会遵循某种约定,如驼峰命名,如果与数据库列名不一致,可能需要手动调整。 2. 关联关系:如果数据库中存在外键,生成的映射文件需要正确表示这些关联关系,如一对一、一对...

    根据数据库表生成实体、hibernate配置文件和实体映射文件

    3. 指定生成文件的位置和命名规则。 4. 运行代码生成工具,它会基于数据库表结构创建实体类、配置文件和映射文件。 5. 在生成的文件中进行必要的调整,例如添加业务逻辑、验证规则等。 通过这个过程,开发者可以...

    hibernate-entitymanager-3.2.1.GA.zip

    在3.2.1.GA版本中,Hibernate Entity Manager支持复杂的JPQL查询,包括联接、分组、排序和子查询,以及命名查询和参数绑定。 7. **事务管理** Hibernate Entity Manager提供了基于JTA或JDBC的事务管理机制。在...

    HIbernate映射实例

    在Hibernate中,映射是通过XML文件(通常命名为.hbm.xml)或注解来实现的,它定义了Java类和数据库表之间的对应关系。映射文件包含了类的属性与数据库字段、主键生成策略、关联关系等关键配置。这些映射信息使得...

    Hibernate HQL命名参数和Query接口的分页

    在Java的持久化框架Hibernate中,HQL(Hibernate Query Language)是用于操作对象关系映射(ORM)的SQL方言,提供了更加面向对象的查询方式。本篇将详细讲解HQL中的命名参数以及如何通过Query接口实现分页查询,这...

    hibernate生成pojo

    - **命名规范**:建议遵循一定的命名规范,比如表名与类名保持一致等。 - **字段映射**:在生成POJO时,可以根据实际情况调整字段映射,例如忽略某些不需要的字段。 - **安全性**:在生成的代码中避免硬编码数据库...

    myeclipse中hibernate的反向工程

    4. **配置映射选项**: 在向导中选择要映射的表,配置实体类生成的位置以及映射文件的命名规则等。 5. **执行反向工程**: 完成向导设置后,执行操作,MyEclipse将根据数据库表结构生成相应的Java类和映射文件。 ####...

    Hibernate开发lib包

    - 注解驱动:在Hibernate 3.3中,注解成为了一种主流的元数据声明方式,开发者可以使用Java类的注解来定义实体类及其与数据库表的映射关系,如`@Entity`表示实体类,`@Table`定义表名,`@Id`标识主键等。...

    Hibernate Tool.zip

    例如,可以选择字段的访问类型(属性或getter/setter)、生成的注释、驼峰命名规则转换等。此外,还能设置类名和字段名,确保生成的代码符合命名规范。 5. **生成代码**:完成设置后,点击“生成”按钮,Hibernate ...

    hibernate annotation hibernate3

    在Java开发领域,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本篇将深入探讨Hibernate 3版本中的注解使用,帮助开发者理解如何利用注解进行数据持久化,提高开发效率。 一、...

    hibernate.zip

    配置文件“hibernate.cfg.xml”中通常包含数据库连接信息、JDBC驱动、实体类的命名规则等。此外,实体类的映射信息通常写在另一个XML文件(如 "*.hbm.xml")或使用注解形式。 4. **实体类和映射**: 实体类代表...

    Hibernate3.2EnumTypeMapping-demo.zip

    为了解决这些问题,Hibernate3.2引入了`org.hibernate.type.EnumType`,这是一种定制的类型,可以将枚举直接映射到数据库的特定字段,支持多种存储策略。 1. **枚举类型映射的三种策略**: - `ORDINAL`:默认策略...

    hibernate的所有必备jar包

    2. hibernate-core-5.0.7.Final.jar:这是Hibernate的核心库,包含了Hibernate的主要功能,如Session接口、Entity类的映射、查询语言(HQL)等。 3. javassist-3.18.1-GA.jar:Java字节码操作库,用于在运行时修改类...

    hibernate正向工程和逆向工程

    - 手动创建Java实体类(User),并为其添加Hibernate注解,例如`@Entity`等,以便于MyEclipse自动生成Hibernate映射文件。 ```java @Entity public class User { private int uid; private String pwd; private...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.4.3 Hibernate映射类型接口  2.4.4 可供扩展的接口  2.5 小结  2.6 思考题 第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射...

Global site tag (gtag.js) - Google Analytics