• BAE 环境下 hibernate annotations 配置


     annotations 配置 首先需要加入 hibernate-jpa-2.0-api-1.0.1.Final.jar 和 ejb3-persistence.jar 这两个包

     ejb3-persistence.jar  提供了 javax.persistence.* 

     hibernate-jpa-2.0-api-1.0.1.Final.jar 提供了 Hibernate对注解的支持

     接着配置 hibernate.cfg.xml  加入下面的代码 添加POJO的持久化类映射 

    <mapping class="bean.XXX" />

     之后可以持久化 bean.XXX 类了

     但是之后就可能会 发现一个问题,尤其是原本在 windows下开发的。 这个问题就是数据库里的 表名大小写问题,在 windows 下mysq 的表名l默认大小写是不敏感的,但是在 linux 下 mysql 的默认是大小写是敏感的,虽然可以通过对 mysql的配置文件 my.ini  进行修改,在 [mysqld] 后添加 

    lower_case_table_names=1

    当前的环境是 BAE ,显然不可能 修改 my.ini

     由于Hibernate 再解析 hql 的时候把表名转换成了纯小写,但是在自动生成表的时候 如果不修改默认映射表名的话 会根据类名生成表,这导致了在 实际做数据库操作的时候导致错误:

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'llXXxMuiXhSwIXFSiXxk.users' doesn't exist

    这样一来就需要把默认表名改掉,改成小写的这样生成的表和实际操作的表名就一致了。

    但是这里又可能会有一个错误:

    import org.hibernate.annotations.Table;
    /**
     * Users entity. @author MyEclipse Persistence Tools
     */
    @Entity
    @Table(appliesTo="Users")

     很多人可能都是这样配置的,但是 @org.hibernate.annotations.Table is a complement, not a replacement to@javax.persistence.Table

    @org.hibernate.annotations.Table 它只是一个补充不是替代 @javax.persistence.Table 。

    如果想通过修改 appliesTo 的值来修改 映射的表名就会发生错误,这个错误不会导致 在 BAE 中不能发布,但是访问站点的时候就会出现 404 ,通过查看日志就会发现 WARNING ,错误为:

    org.hibernate.AnnotationException: @org.hibernate.annotations.Table references an unknown table: users

     实际上想改变默认的表名,必须使用 @javax.persistence.Table ,代码如下:

    import javax.persistence.Table;
    
    /**
     * Users entity. @author MyEclipse Persistence Tools
     */
    @Entity
    @Table(name="users")

    这样就修改掉默认的映射表名,数据库也能正常使用了

  • 相关阅读:
    jQuery中.bind() .live() .delegate() .on()的区别
    jq中Deferred对象的使用
    事件捕获和事件冒泡
    exec与match方法的区别
    json的转换操作
    iframe内容自适应高度
    Html:upload
    小米盒子
    APUE读书笔记:关于sigsuspend
    我的C笔记
  • 原文地址:https://www.cnblogs.com/ksh123/p/3213522.html
Copyright © 2020-2023  润新知