} } }

    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)


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

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