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 注解配置一对多关系      从Hibernate 2.5开始就可以使用annotation实现实体关系的映射了,减少了配置hbm文件的繁琐,而且annotatio...
  • tomcat_2014
  • tomcat_2014
  • 2015-05-26 10:02:45
  • 5036

hibernate单向一对多关联映射(注解版)

  • 2017年05月04日 15:30
  • 20KB
  • 下载

Hibernate:一对多关系在实体类使用注解

User表: @OneToMany(mappedBy="user") @Fetch(FetchMode.SUBSELECT) private List orders; Order表: @M...
  • u013692310
  • u013692310
  • 2016-12-14 15:55:02
  • 2551

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

单边多对一与单边一对多关系相反,多的一方有一方的
  • lihaoju
  • lihaoju
  • 2014-08-25 15:02:46
  • 518

实体关系映射(一对多@OneToMany)

一对多模型(单向) 说明: 一个客户对应多个地址,通过客户可以获得该客户的多个地址的信息。客户和地址是一对多的关系,并且客户与地址是单向关联的关系。映射策略外键关联:两个表的关系定义在一个表中; 表...
  • u013036792
  • u013036792
  • 2017-06-07 18:16:26
  • 336

SSH框架之Hibernate的关联映射之一对多、多对一映射

关联映射之一对多、多对一映射 一、需求: 部门与员工 一个部门有多个员工 【一对多】 多个员工,属于一个部门 【多对一】 二、逻辑分析: 三、代码实现 1、javabean及映射文件的配...
  • qq_34944851
  • qq_34944851
  • 2016-12-19 11:37:53
  • 2892

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

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

【HibernateHibernate实体关系映射——双边的多对一、一对多关系

双边的多对一、一对多关系      双边关系是最常见的配置。在多方有一方的引用,一方也有多方的引用。双边关系能够很方便的查询数据。下面以一个班级与学生的双边关系来深入学习。      班级(claz...
  • lmb55
  • lmb55
  • 2015-06-18 23:15:54
  • 2206

hibernate关联关系注解(一对多、多对一、一对一)

一对多、多对一、一对一的注解实现 casecade={CasecadeType.REFRESH}的含义是只是查询级联,它还有其他3个类型: CascadeType.MERGE级联更新 CascadeT...
  • qq_33556185
  • qq_33556185
  • 2016-06-13 15:57:19
  • 6814

Hibernate 一对多映射: inverse属性的作用

在映射一对多表关系的时候存在一个inverse的问题,一直以来对inverse不怎么了解,今天用到它想要弄明白,在网上看了无数个帖子还是不懂,最后终于看到一位高人的一篇帖子,解释得很透彻,终于彻底了解...
  • gladmustang
  • gladmustang
  • 2014-10-25 14:46:58
  • 1803
收藏助手
不良信息举报
您举报文章:4、Hibernate 实体关系映射(一、单边一对多关系 注解、xml两种方式)
举报原因:
原因补充:

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