组成关系

在一个员工模型里面需要存入

员工公司所在地址的城市,街道

员工籍贯所在的城市,街道,

此时可以抽取城市,街道变成一个模型即是组成关系

Employee

public class Employee {
private Long id;
private String name;
// 公司的地址
private Address comAddress;
// 籍贯所在地
private Address homeAddress;

Employee.hbm.xml

<class name="Employee" table="t_employee">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<!-- 组成关系:以对象的方式来解决重复的信息 -->
<!-- 公司所在的地址 -->
<!-- class必须配置为全类名 -->
<component name="comAddress" class="Address">
<!-- property:name必须配置成java的属性,column配置成数据库的字段,而且不能重复 -->
<property name="city" column="com_city" />
<property name="street" column="com_street" />
</component>
<!-- 籍贯所在的地址 -->
<component name="homeAddress" class="Address">
<property name="city" column="home_city" />
<property name="street" column="home_street" />
</component>
</class>

MainTest

public class MainTest {
Session session = null; @Before
public void save() {
session = HibernateUtils.INSTANCE.getSession();
session.beginTransaction();
Address comAddress = new Address("bj", "st1");
Address homeAddress = new Address("sh", "st2"); Employee employee = new Employee("user");
employee.setComAddress(comAddress);
employee.setHomeAddress(homeAddress); session.save(employee);
} @Test
public void get() throws Exception {
Employee employee = (Employee) session.get(Employee.class, 1L);
System.out.println(employee);
System.out.println(employee.getComAddress());
System.out.println(employee.getHomeAddress());
} @After
public void colse() {
session.getTransaction().commit();
session.close();
}
}

源码地址

https://github.com/je-ge/hibernate

如果觉得我的文章对您有帮助,请予以打赏。您的支持将鼓励我继续创作!谢谢!



Hibernate 系列教程10-组成关系的更多相关文章

  1. Hibernate 系列教程16-二级缓存

    pom.xml <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate- ...

  2. Hibernate 系列教程7-双向一对一

    双向一对一 一对一主要用在 一个一方需要的信息比较少,比如注册的登录信息 另一个一方存储的信息比较多,比如注册之后用户填写的详细信息 实现方式常用的主要有2种: java模型都是一样,其中一个映射文件 ...

  3. Hibernate 系列教程6-双向多对多

    双向多对多inverse配置 如果关系两边都使用默认inverse=false配置,表示关系两边都可以管理中间表的数据 关系其中一边设置inverse=true配置,表示自己放弃管理中间表关系,由对方 ...

  4. Hibernate 系列教程5-双向多对一

    主要讲解inverse和cascade的用法 cascade定义的是关系两端对象到对象的级联关系: 而inverse定义的是关系和对象的级联关系(管理外键的值). inverse 属性默认是false ...

  5. HTML5游戏开发系列教程10(译)

    原文地址:http://www.script-tutorials.com/html5-game-development-lesson-10/ 最后我们将继续使用canvas来进行HTML5游戏开发系列 ...

  6. NetworkX系列教程(10)-算法之五:广度优先与深度优先

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

  7. Hibernate 系列教程17-查询缓存

    在二级缓存配置成功的基础上进行查询缓存配置 Product public class Product { private Long id; private String name; Product.h ...

  8. Hibernate 系列教程15-一级缓存

    Product public class Product { private Long id; private String name; Product.hbm.xml <class name= ...

  9. Hibernate 系列教程14-继承-PerTable策略

    Employee public class Employee { private Long id; private String name; HourlyEmployee public class H ...

随机推荐

  1. Android启动另一个APP时,注意disable与enable的问题

    在写游戏sdk时候遇到了一个需要在sdk中通过scheme来启动支付宝的免密支付功能,所以需要在设备中通过包名检查一下支付宝是否存在. 此时遇到了一个问题,在三星设备中可以将app给处于disable ...

  2. hdu_5193_Go to movies Ⅱ(带插入删除的逆序对,块状链表)

    题目链接:hdu_5193_Go to movies Ⅱ 题意: 有n个人站成一排,每个人的身高为Hi.每次有人加入或者有人离开,就要判断有多少人站反了(i < j&&Hi> ...

  3. hdu_5903_Square Distance(dp)

    题目链接:hdu_5903_Square Distance 题意: 给你一个长度为n的a串,一个数m,现在让你构造一个长度也为n的b串,使这个串是由两个相同的串拼起来的,并且和a串对应的位不同的数量为 ...

  4. LNK2019解决思路

    虽然官网给出了很多可能的原因,最可能的原因还是因为缺少某个库文件.最近解决的一个为例总结一下思路 Winmm.lib; ad_win32.obj : error LNK2019: unresolved ...

  5. B - ACboy needs your help(动态规划,分组背包)

    B - ACboy needs your help Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  6. tableview 代理方法详解

    typedef NS_ENUM(NSInteger, UITableViewCellAccessoryType) { UITableViewCellAccessoryNone, // 不显示任何图标 ...

  7. php扩展memcache的安装

    1.安装memcache服务器 Memcached作为开放.免费.高效的.分布式的内存缓存系统受到很多网站的欢迎. 官网下载memcached源代码安装包,稳定版即可 官网:http://memcac ...

  8. 在鼠标右键添加“使用WPS打开”

    假设WPS安装在 “D:\Program Files\Kingsoft\WPS Office” 目录下,导入以下注册表内容: Windows Registry Editor Version 5.00 ...

  9. java操作cookies

    建立一个无生命周期的cookie,即随着浏览器的关闭即消失的cookie,代码如下 HttpServletRequest request HttpServletResponse response Co ...

  10. scanf函数与scanf_s函数

    ANSI C中没有scanf_s(),只有scanf(),scanf()在读取时不检查边界,所以可能会造成内存泄露.所以vc++2005/2008中提供了scanf_s(),在最新的VS2013中也提 ...