首页 > 新闻动态 >  

新闻动态
NEWS

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)


如许就批改掉默认的映射表名,数据库也能正常应用了

真正的心灵世界会告诉你根本看不见的东西,这东西需要你付出思想和灵魂的劳动去获取,然后它会照亮你的生命,永远照亮你的生命。——王安忆《小说家的十三堂课》
分享到: