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")

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

posted @ 2013-07-25 02:53  夺命叉  阅读(1403)  评论(0编辑  收藏  举报