Hibernate详解(四)---->>关联关系映射(一)
关联关系是在领域模型建模中经常使用到的一种关系,它是对现实世界中事物之间的关系最基本的表示。
关联关系指的是不同持久化类之间的一种结构关系,简单的说,关联关系描述某个对象在一段时间内一直知道另一个对象的存在。
关联关系包括多样性的关联和方向性的关联。
Hibernate 框架作为一种 ORM 技术的实现,对关联关系的映射实现得很完美,也易于理解和掌握,接下来分别介绍各类型关联关系的映射在 Hibernate 中是如何实现的。1、单向多对一 多对一是最常见的,也是最容易理解的一种关联。比如:多个员工属性同一个部门。多个产品属于同一个类别,多个产品订单属于同一个账号。单向的多对一指的是多方可以访问一方,而一方不知道多方的存在。
Department.java(一方)
package com.zxf.domain; /** 部门实体类 */ public class Department { private Long id; //对象标识符(OID) private String name; //姓名 private String description; //入职时间 public Department(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
package com.zxf.domain; /** 部门实体类 */ public class Department { private Long id; //对象标识符(OID) private String name; //姓名 private String description; //入职时间 public Department(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
Employee.java(多方)
package com.qiujy.domain; import java.util.Date; /** 员工实体类 */ public class Employee { private Long id; //对象标识符(OID) private String username; //姓名 private Date joinTime; //入职时间 private Department dept; //所属的部门 public Employee(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
package com.qiujy.domain; import java.util.Date; /** 员工实体类 */ public class Employee { private Long id; //对象标识符(OID) private String username; //姓名 private Date joinTime; //入职时间 private Department dept; //所属的部门 public Employee(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
Department.hbm.xml
package com.zxf.domain; import java.util.Date; /** 订单实体类 */ public class Order { private Long id; //对象标识符(OID) private String orderNo; //订单编号 private Date createdTime; //下单时间 public Order(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
package com.zxf.domain; import java.util.Date; /** 订单实体类 */ public class Order { private Long id; //对象标识符(OID) private String orderNo; //订单编号 private Date createdTime; //下单时间 public Order(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
Account.java(一方 配置文件相对复杂)
package com.zxf.domain; import java.util.Set; /** 账号实体类 */ public class Account { private Long id; //对象标识符(OID) private String loginName; //姓名 private Set<Order> orderSet; //所下订单的集合 public Account(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
package com.zxf.domain; import java.util.Set; /** 账号实体类 */ public class Account { private Long id; //对象标识符(OID) private String loginName; //姓名 private Set<Order> orderSet; //所下订单的集合 public Account(){} //无参数的构造方法 //以下省略所有属性的getters和setters方法... }
Order.hbm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <!-- 映射持久化类 -->
- <class name="com.zxf.domain.Order"
- table="orders">
- <!-- 映射对象标识符 -->
- <id name="id" column="id" type="long">
- <generator class="native" />
- </id>
- <!-- 映射普通属性 -->
- <property name="orderNo" column="order_no"/>
- <property name="createdTime"
- column="created_time" type="timestamp"/>
- </class>
- </hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 映射持久化类 --> <class name="com.zxf.domain.Order" table="orders"> <!-- 映射对象标识符 --> <id name="id" column="id" type="long"> <generator class="native" /> </id> <!-- 映射普通属性 --> <property name="orderNo" column="order_no"/> <property name="createdTime" column="created_time" type="timestamp"/> </class> </hibernate-mapping>
Account.hbm.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <!-- 映射持久化类 -->
- <class name="com.zxf.domain.Account" table="account">
- <!-- 映射对象标识符 -->
- <id name="id" column="id" type="long">
- <generator class="native" />
- </id>
- <!-- 映射普通属性 -->
- <property name="loginName" column="login_name"/>
- <!-- 映射集合属性,关联到多端的实体类 -->
- <set name="orderSet" cascade="save-update">
- <!-- 用key元素指定关联的外键列 -->
- <key column="account_id" />
- <!-- 用one-to-many元素关联到多端的实体类 -->
- <one-to-many class="com.zxf.domain.Order" />
- </set>
- </class>
- </hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 映射持久化类 --> <class name="com.zxf.domain.Account" table="account"> <!-- 映射对象标识符 --> <id name="id" column="id" type="long"> <generator class="native" /> </id> <!-- 映射普通属性 --> <property name="loginName" column="login_name"/> <!-- 映射集合属性,关联到多端的实体类 --> <set name="orderSet" cascade="save-update"> <!-- 用key元素指定关联的外键列 --> <key column="account_id" /> <!-- 用one-to-many元素关联到多端的实体类 --> <one-to-many class="com.zxf.domain.Order" /> </set> </class> </hibernate-mapping>
配置文件:hibernate.cfg.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <!-- 数据库方言设置 -->
- <property name="hibernate.dialect">
- org.hibernate.dialect.MySQLInnoDBDialect
- </property>
- <!-- 数据库连接参数设置 -->
- <property name="hibernate.connection.driver_class">
- com.mysql.jdbc.Driver
- </property>
- <property
- name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
- <property name="hibernate.connection.username">root</property>
- <property name="hibernate.connection.password">123</property>
- <!--实际操作数据库时是否显示SQL -->
- <!--
- <property name="hibernate.show_sql">true</property>
- <property name="hibernate.format_sql">true</property>
- -->
- <!--将数据库schema的DDL导出到数据库 -->
- <property name="hibernate.hbm2ddl.auto">update</property>
- <!-- 以下定义实体类与数据库表的映像文件 -->
- <mapping resource="com/zxf/domain/Account.hbm.xml" />
- <mapping</st
相关推荐
XCMercy 2019-10-25
laopolu 2011-10-25
cnflat0 2013-12-30
xiaowanggedege 2012-06-14
nameFay 2012-03-14
xiongdy 2011-05-02
mr丶韩 2010-10-19
yasashikokoro 2010-04-04
txksnail 2017-09-04
Danialzhou 2019-04-07
flueky 2010-07-12
JackSivenChen 2010-07-08
dansan 2010-07-07
dansan 2010-06-17
flueky 2010-06-13
flueky 2010-06-12
董老师在硅谷 2018-05-09
软件设计 2017-07-23