关闭

Hibernate 开发流程笔记(中)

标签: hibernate
424人阅读 评论(0) 收藏 举报

继续上篇,我们已经通过使用hbm2java来生成了entity实体类,这些实体类可能会有问题,需要修改。修改完成之后配置hbm2ddl来测试orm是否有问题。


在entity的one-to-many关系中,我习惯使用List而不是HashSet,对五个实体类进行修改,配置hbm2ddl,发现只能生成user表,forum表,subforum表


调试一天发现:对于topic和reply的 text类型的字段,hbm2java后长度为65535;在Mysql文档上查询,发现下面这句话:


The effective maximum length of aVARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used


其中的关键之处在于 65535的单位是byte,而我的数据库编码方式却是utf8_genera_ci,长度上肯定要小很多,测试发现utf8_general_ci字符集的varchar最多可以设为21806;

因此,在实体类中,把Topic和Reply的内容长度通过注解的方式给成10000即可解决问题,hbm2ddl后内容字段类型为varchar(10000) 

对于text类型,在powerdesigner进行设计时不推荐使用!


除了这些,还要在entity中设置主键增长策略。JAP中,只有四种主键增长策略:

  1. 容器自动生成---GeneratorType.AUTO 
  2. 根据数据库序列号(Sequence)生成 ---GenerationType.SEQUENCE  ,oracle支持
  3. 使用数据库的自动增长字段生成---GenerationType.IDENTITY 
  4. 使用数据库表的字段生成---GenerationType.TABLE 
Forum表和Subforum表可以设为AUTO,但是User等其他表需要使用uuid增长策略,解决方法是 JPA注解和Hibernate注解一起使用。
  1. //uuid增长策略  
  2. @GenericGenerator(name = "idGenerator", strategy = "uuid")  
  3.     @GeneratedValue(generator = "idGenerator")  
  4.   
  5. //auto增长策略  
  6. @GeneratedValue(strategy=GenerationType.AUTO)  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3167次
    • 积分:53
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章存档