BAE 景象下 hibernate annotations 设备
添加时间:2013-7-25 点击量:
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 doesnt 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)
如许就批改掉默认的映射表名,数据库也能正常应用了
真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
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 doesnt 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)
如许就批改掉默认的映射表名,数据库也能正常应用了
真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》