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")
这样就修改掉默认的映射表名,数据库也能正常使用了