Hibernate 开发流程笔记(中)

继续上篇,我们已经通过使用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注解一起使用。
//uuid增长策略
@GenericGenerator(name = "idGenerator", strategy = "uuid")
    @GeneratedValue(generator = "idGenerator")

//auto增长策略
@GeneratedValue(strategy=GenerationType.AUTO)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值