4、Hibernate 实体关系映射(一、单边一对多关系 注解、xml两种方式)

原创 2014年08月24日 18:35:58

单边一对多关系是指一方有集合属性,包含多个多方,而多方没有一方的引用。比如典型的用户与电子邮件。

表person
id int(自增)
name varchar(20)

表email
id int(自增)
email varchar(20)
person_id int

一、注解方式

配置Person类

Person实体类中使用@OneToMany配置一对多关系。fetch配置加载方式(延迟加载或者即时加载)。targetEntity中配置属性的类型,由于emails属性类型为List<Email>,用泛型指定集合内为Email对象,因此targetEntity可省略。cascade配置级联方式,配置为PERSIST、REMOVE、MERGE、REFRESH,表示在保存、删除、修改、刷新Person类时,会自动在数据库中保存、删除、修改、刷新属于它的Email对象配置级联后,可以通过操作Person类来操作Email类。该配置也等同于CascadeType.ALL。@Orderby配置排序方式。


Person.java代码:

<span style="font-size:14px;"><strong><span style="font-size:12px;">@Entity
@Table(name = "person")
public class Person {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	
	private String name;

	@OneToMany(fetch = FetchType.EAGER, targetEntity = Email.class, cascade = {
		CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE, CascadeType.REFRESH
	})
	@JoinColumns(value = { @JoinColumn(name = "person_id", referencedColumnName = "id")})
	@OrderBy(value = "email desc")
	private List<Email> emails = new ArrayList<Email>();
        //get set方法略
}</span></strong>
</span>

配置Emai类

Email.java代码:

<span style="font-size:12px;">@Entity
@Table(name = "email")
public class Email {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	
	private String email;
       //get set方法略
}</span>

二、xml方式

配置Person类

Person.hbm.xml代码:

<class name="Person" table="person">
    <id name="id" column="id">
        <generator class="native">
    </id>
    <property name="name" />
    <bag name="emails" cascade="all" lazy="false" where="email like '%@%'" order-by="email">
        <key column="person_id"></key>
        <one-to-many class="com.lhj.bean.Email" />
     </bag>
</class>

<bag>标签配置List类型属性,cascade配置级联方式,lazy配置加载方式,用order-by为查处的Email按列排序。除此之外还可用where配置加载Email时的附属条件。<key>指定外键列,<one-to-many>配置多方的类型。

配置Email类

<class />配置实体类,name指定实体类名,table指定表名。<id>配置主键,name属性指定主键属性,column指定数据库主键列。<generatoe />配置主键生成策略。

<class name="Email" table="email">
    <id name="id" column="id">
        <generator class="native" />
    </id>
    <property name="email" />
</class>



Hibernate一对多关联映射(注解)

Hibernate一对多关联映射,维护端(一方,无外键方)可以进行关联移除,级联删除,级联保存,级联更新,级联刷新。被维护端(多方,外键方),不可以进行关联移除,级联操作,只能级联刷新。   ...
  • hardworking0323
  • hardworking0323
  • 2016年04月10日 18:35
  • 2751

Hibernate关系对映-表映射基于XML配置方式

个人框架初学者,觉得hibernate的内容多,不多写肯定记不下来,写多了也不一定能信手拈来。所以今天写下一个总结,重温一遍,有需要的可以看看,大概分为: 1.对应关系(一对多 多对一 双向一对多 基...
  • snakeMoving
  • snakeMoving
  • 2016年11月25日 13:47
  • 711

Hibernate的关联关系注解映射(一对一、一对多、多对一、多对多、自连接)

1. 一对多关系: 在一的一方添加注解@OneToMany(targetEntity=Goods.class,cascade=CascadeType.ALL),指定cascade为all,即交由多的一...
  • baidu_28283827
  • baidu_28283827
  • 2016年10月11日 16:28
  • 3909

4、Hibernate 实体关系映射(二、单边多对一关系 注解、xml两种方式)

单边多对一与单边一对多关系相反,多的一方有一方的
  • lihaoju
  • lihaoju
  • 2014年08月25日 15:02
  • 482

Spring整合Hibernate映射关系注解版 -- 实例

1.多对多
  • he90227
  • he90227
  • 2014年08月20日 17:31
  • 2363

Hibernate 实体映射 @注解与xml 配置方式比较

实体和数据库之间存在某种映射关系,hibernate根据这种映射关系完成数据的存取。在程序中这种映射关系由映射文件(*.hbm.xml)或者java注解(@)定义。 本文以java注解的形式总结映射...
  • gladmustang
  • gladmustang
  • 2014年10月27日 13:44
  • 4382

hibernate5(11)注解映射[3]一对多多对一双向关联

在上两篇文章里,我们详细地分别讲解了一对多和多对一的单向关联配置的具体属性含义,在这一篇文章里,我们完成两者的的整合建立双向关联。 在实际的博客网站中,我们可能需要根据文章读取作者(用户)信息,但肯...
  • qwe6112071
  • qwe6112071
  • 2016年04月08日 08:51
  • 3666

hibernate 注解配置一对多关系简单实例

hibernate 注解配置一对多关系      从Hibernate 2.5开始就可以使用annotation实现实体关系的映射了,减少了配置hbm文件的繁琐,而且annotatio...
  • tomcat_2014
  • tomcat_2014
  • 2015年05月26日 10:02
  • 4689

Hibernate注解版多对一关系的几个注意点

1.双向多对一和一对多 注解版 双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side)。在关系被维护端需要通过@JoinColumn建立...
  • he90227
  • he90227
  • 2014年09月11日 13:30
  • 4581

hibernate学习一对一,一对多,多对一,多对多,注解版和XML版

只是个人简单的一点小结 hibernate的配置文件 hibernate.cfg.xml         "-//Hibernate/Hibernate Configuration DTD 3.0...
  • I_do_can
  • I_do_can
  • 2015年12月22日 15:27
  • 1706
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4、Hibernate 实体关系映射(一、单边一对多关系 注解、xml两种方式)
举报原因:
原因补充:

(最多只允许输入30个字)