Hibernate注解方式一对多自关联关系映射
来源:互联网 发布:净网行动知乎 编辑:程序博客网 时间:2024/06/03 01:44
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映射文件如下:
<class name="DictItem" table="SYS_DICT_ITEM"><id name="code" type="java.lang.String"><column name="item_code"></column><generator class="assigned"></generator></id><property name="value" type="java.lang.String"><column name="item_value"></column></property><property name="dictCode" type="java.lang.String"><column name="dict_code"></column></property><property name="parentCode" type="java.lang.String"><column name="parent_code"></column></property><property name="editTime" type="java.util.Date"><column name="edit_time"></column></property><property name="desc" type="java.lang.String"><column name="item_desc"></column></property><property name="seq" type="java.lang.Integer"><column name="seq"></column></property><property name="status" type="java.lang.Boolean"><column name="status"></column></property><!-- DictItem:DictItem = 基于外键的单向1:n关联--><set name="children" inverse="false" cascade="all" lazy="false" order-by="seq"><key column="parent_code"/><one-to-many class="DictItem"/></set></class>
换成注解方式的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类的代码,源码侵入性较强。
因此,选用适合的方式即可。
0 0
- Hibernate注解方式一对多自关联关系映射
- Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接)
- Hibernate一对多关联映射(注解)
- Hibernate 映射一对多关联关系
- hibernate一对多关系映射(自身关联)
- hibernate 一对多 关系关联映射
- hibernate映射一对多双向关联关系
- hibernate的映射:一对多关联关系
- Hibernate 映射一对多关联关系
- Hibernate映射一对多的关联关系
- Hibernate 关系映射注解详解--一对多
- Hibernate -- 映射实体关联关系(一对多关联关系)
- hibernate注解方式单向一对多关联
- hibernate注解方式双向一对多关联
- hibernate注解方式实现一对多映射
- hibernate注解方式实现一对多映射
- hibernate注解方式实现一对多映射
- hibernate注解方式实现一对多映射
- sudo使用及日志添加
- 简单介绍Matrix的图形特效
- fatal error: file '/Applications/Xcode5-DP.app/Contents/Developer/Platforms/iPhoneSimulator...
- 黑马程序员_Java基础_IO流_打印流,合并流,分割文件,对象持久化,管道流...其他常用流
- 传统手工盘点与盘点机盘点方案对比,盘点机的用途,盘点机的价值,汉码科技实时盘点方案
- Hibernate注解方式一对多自关联关系映射
- uvaoj 673 Parentheses Balance
- Leetcode:Reverse Linked List II 单链表区间范围内逆置
- java android 最全的电话号码检测
- 程序员永远的痛之字符编码的奥秘
- 如何不被程序员(RD)们嫌弃--写给那些血气方刚的产品经理(PM)
- sql中的类型转换和拼接sql
- Everythis is store书载(2)
- iOS_study_fourth