<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: MySQL版数据库表结构DROP TABLE IF EXISTS SYS_DICT_ITEM;CREATE TABLE SYS_DICT_ITEM( ITEM_CODE VARCHAR(100) NOT NULL...

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

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





相关文章
|
Web App开发 前端开发
|
Web App开发 前端开发 算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
基于大数据的精准营销与应用场景 2015年08月11日 大数据 大数据营销时代来临营销学领域过去半个多世纪的发展让我们见证了从“以产品为中心”到“以客户为中心”的转变。
1046 0
|
SQL Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
     如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
868 0
|
Web App开发 前端开发
|
数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
CentOS 6.5安装配置ldap 时间:2015-07-14 00:54来源:blog.51cto.com 作者:“ly36843运维” 博客 举报 点击:274次 一.
1002 0
|
Web App开发 前端开发 大数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
一、概述   多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式、雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别。
845 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Runnable:一般指该线程正在执行状态中,该线程占用了资源,正在处理某个请求,例如有可能在对某个文件操作,有可能进行数据类型等转换。
694 0
|
Web App开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
                                                                                序列化对单例的破坏 本文将通过实例+阅读Java源码的方式介绍序列化是如何破坏单例模式的,以及如何避免序列化对单例的破坏。
1006 0
|
Web App开发 前端开发 大数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
打算对新建的hadoop集群使用管理工具,列了以下主要的不同点: 主要的不同点 apache Ambari ClouderaManager Express(免费版) 配置版本控制和历史记录 支...
986 0
|
Web App开发 Java Apache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
   我在以前的一个老项目中使用的spring security的版本是spring-core-3.0.1.RELEASE.jar,其他的相关依赖的包也是这个版本的,但在我在新的项目中把包的版本升级成了3.24的;使用的配置文件还是用原来3.01的applicationContext-security.xml-old。
1086 0

热门文章

最新文章

下一篇
oss云网关配置