MySQL版数据库表结构
DROP TABLE IF EXISTS SYS_DICT_ITEM; CREATE TABLE SYS_DICT_ITEM( ITEM_CODE VARCHAR(100) NOT NULL, ITEM_VALUE VARCHAR(200), DICT_CODE VARCHAR(100) NOT NULL, PARENT_CODE VARCHAR(100), EDIT_TIME DATETIME, ITEM_DESC VARCHAR(100), SEQ INT(6), STATUS CHAR(1), PRIMARY KEY(DICT_CODE, ITEM_CODE) );其中,PARENT_CODE字段即表示SYS_DICT_ITEM表的ITEM_CODE字段
先来看看XML方式的Hibernate映射关系
JavaBean类如下,简单起见,setter和getter方法省略了
public class DictItem extends StatefulBean {
private static final long serialVersionUID = -377812468484463777L;
private String code; // 字典项编码
private String value; // 字典项值
private String dictCode; // 字典编码
private String parentCode; // 父节点编码
private Date editTime; // 修改时间
private String desc; // 描述
private Integer seq = 0; // 序号:0(默认值)
private Boolean status = Boolean.valueOf(true); // 可用状态:true-启用(默认值),false-停用
private Set<DictItem> children;
}
Hibernate的XML映射文件如下:
换成注解方式的JavaBean代码如下:@Entity @Table(name="SYS_DICT_ITEM") public class DictItem extends StatefulBean { private static final long serialVersionUID = -377812468484463777L; @Id @GenericGenerator(name = "idGenerator", strategy = "assigned") @Column(name="ITEM_CODE") private String code; // 字典项编码 @Column(name="ITEM_VALUE") private String value; // 字典项值 @Column(name="DICT_CODE") private String dictCode; // 字典编码 @Column(name="PARENT_CODE") private String parentCode; //父项编码 @Column(name="EDIT_TIME") private Date editTime; // 修改时间 @Column(name="ITEM_DESC") private String desc; // 描述 @Column(name="SEQ") private Integer seq; // 序号 @Column(name="STATUS") private Boolean status = Boolean.valueOf(true); // 可用状态:true-启用(默认值),false-停用 @OneToMany(targetEntity=DictItem.class, mappedBy="children", cascade=CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "PARENT_CODE") @OrderBy("seq") private Set<DictItem> children; }
这里也有一篇帖子是使用注解方式的,但是父对象类型是自定义的JavaBean,而不是简单的Java类型
http://guobin6125.iteye.com/blog/1597937
由于系统中需要将查询出来的JavaBean对象转换成json字符串,使用json-lib,父对象如果类型使用自定义的JavaBean,即DictItem类本身,转换成json字符串的时候就会报错,提示转换出现循环xxx,因此转换一下思路,使用String简单类型来保存关联关系即可。
关于Hibernate使用XML还是注解来维护映射关系,各有好处吧。并且,Spring框架也对Hibernate注解方式提供了很好的兼容性支持。
虽然XML内容是多了点儿,但是一般情况情况下,咱们也不会一个字符一个字符重新手写的,大部分都是拷贝过来修改的;而注解方式,虽然看起来简单,但是需要熟悉其中各种关系的配置方式,并且需要直接修改JavaBean类的代码,源码侵入性较强。
因此,选用适合的方式即可。