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类的代码,源码侵入性较强。

因此,选用适合的方式即可。

转自:http://www.cnblogs.com/wenlong/p/4070096.html

Hibernate注解方式一对多自关联关系映射的更多相关文章

  1. Hibernate注解(二):关联关系映射注解

    关联关系映射注解以下项目均在之前相应代码的基础上进行的修改.这些项目均需要做的是: 删除映射文件 在hibernate.cfg.xml中注册实体类 注解的重要位置在实体类中关联属性上.这里是关联 ...

  2. hibernate注解方式来处理映射关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...

  3. Hibernate 注解方式配置

    在Hibernate3之后就可以使用注解的方式去配置.而且在工作中我们使用的更多的也是注解方式去配置项目,所以还有一部分使用配置文件去配置的一些关系就不在此去一一举例,需要了解的朋友可以去查看Hibe ...

  4. hibernate之关于一对多单向关联映射

    [hibernate]之关于一对多单向关联映射 基于外键的一对多关联映射! 一对多,Group(组)对于Person(人),一个组能够有多个人!ok? Hibernate主要有两种配置方法.一种是An ...

  5. Hibernate注解方式配置-继承关系

    在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...

  6. Hibernate注解:一对多外键关联

    情形:两个表,cms_mode是主表,cms_model_field是子表,cms_model_field的model_id字段关联到cms_model的主键. # # Source for tabl ...

  7. 基于已构建S2SH项目配置全注解方式简化配置文件

    如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 eclipse环境下基于已构建struts2项目整合spring+hiberna ...

  8. Hibernate(6)—— 一对多 和 多对多关联关系映射(xml和注解)总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XM ...

  9. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

随机推荐

  1. C#-string.Format对C#字符串格式化

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  2. SharePreference 注册 registerOnSharedPreferenceChangeListener 无法回调的问题

    以前一直没有用过 registerOnSharedPreferenceChangeListener 回调方法,今天用到了,就设置了下,结果发现不起作用,因为一直没有回调. 代码: mSp = this ...

  3. [svc]centos6上部署openvpn+gg二步认证

    最近又发现个新的vpn: wireguard 为了满足员工在家办公的需求.需要 openvpn+gg方案 在centos6上部署openvpn 参考 1.安装前准备 wget -O /etc/yum. ...

  4. Android中的MVP架构分解和实现

    1.概述 传统的Android开发架构通常是MVC模式. Model:业务逻辑和实体模型 View:相应于布局文件 Controllor:相应于Activity 单独从逻辑看起来很好,与我们做Web开 ...

  5. (转)Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用 - 斯玛特琦

    引言: 在使用 Unity3d 开发微端.或者网页游戏的时候常常须要将资源打包成 AssetBundle ,然后通过 www 的方式动态的下载资源.今天要分享的是我再动态下载 Animation 骨骼 ...

  6. 菜鸟教程之工具使用(一)——Git的基本使用

    Git是进来比较火的版本控制工具,大有取代svn的趋势.关于两种孰好孰坏我就不多费口舌了,网上关于二者的对比文章比比皆是.作为一个IT人员关注行业的发展动态是必须的,所以抽空研究了一下Git的使用.跟 ...

  7. pandas数组和numpy数组在使用索引数组过滤数组时的区别

    numpy array 过滤后的数组,索引值从 0 开始. pandas Series 过滤后的 Series ,保持原来的索引,原来索引是几,就是几. 什么意思呢,来看个栗子: import num ...

  8. asp.net mvc 项目架构解析

    请先看框架图: 从上图可知: 1.Controller控制器只是充当了管道的作用.只做任务的分发,不做请求中的具体业务处理. 2.Views视图充当了展示数据的作用.不做任何取数逻辑的处理,只是展示逻 ...

  9. c++11实现一个简单的lexical_cast

    boost中有一个lexical_cast可以用统一的方式来做基本类型之间的转换,比如字符串到数字,数字到字符串,bool和字符串及数字之间的相互转换.boost::lexical_cast的用法比较 ...

  10. cxf、struts、spring中web.xml过滤url问题解决方案

    利用struts2自带的正则匹配,应该说这算是最官方的解决方案了 在struts.properties中加正则匹配 struts.action.excludePattern=/webservice/. ...