4、Hibernate 实体关系映射(一、单边一对多关系 注解、xml两种方式)
2014-08-24 18:35
591 查看
单边一对多关系是指一方有集合属性,包含多个多方,而多方没有一方的引用。比如典型的用户与电子邮件。
表person
表email
Person实体类中使用@OneToMany配置一对多关系。fetch配置加载方式(延迟加载或者即时加载)。targetEntity中配置属性的类型,由于emails属性类型为List<Email>,用泛型指定集合内为Email对象,因此targetEntity可省略。cascade配置级联方式,配置为PERSIST、REMOVE、MERGE、REFRESH,表示在保存、删除、修改、刷新Person类时,会自动在数据库中保存、删除、修改、刷新属于它的Email对象。配置级联后,可以通过操作Person类来操作Email类。该配置也等同于CascadeType.ALL。@Orderby配置排序方式。
Person.java代码:
配置Emai类
Email.java代码:
二、xml方式
配置Person类
Person.hbm.xml代码:
<bag>标签配置List类型属性,cascade配置级联方式,lazy配置加载方式,用order-by为查处的Email按列排序。除此之外还可用where配置加载Email时的附属条件。<key>指定外键列,<one-to-many>配置多方的类型。
配置Email类
<class />配置实体类,name指定实体类名,table指定表名。<id>配置主键,name属性指定主键属性,column指定数据库主键列。<generatoe />配置主键生成策略。
id | int(自增) |
name | varchar(20) |
id | int(自增) |
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>
相关文章推荐
- 4、Hibernate 实体关系映射(二、单边多对一关系 注解、xml两种方式)
- Hibernate之关系映射的两种方式(xml映射、annotation注解映射)
- Hibernate 实体映射 @注解与xml 配置方式比较
- Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
- Hibernate注解方式处理实体映射关系
- Hibernate 基于注解的方式 实现的关系映射案例(一对一关系,一对多关系,多对多关系)
- hibernate annotation注解方式来处理映射关系
- Hibernate中,One2One映射关系的XML实现方式
- Hibernate映射文件配置(hbm.xml和注解方式)
- hibernate注解方式来处理映射关系
- Hibernate实体关系映射(OneToMany单边)——完整实例
- hibernate实体关系映射——单边的多对多关系
- Hibernate实体映射配置1(java@注解方式)
- Hibernate实体关系映射——单边的一对一关系
- Hibernate两种实体关系映射详解
- Hibernate中,Many2One映射关系的XML实现方式
- Hibernate中,One2Many和Many2One的双向映射关系的XML实现方式
- hibernate annotation注解方式来处理映射关系
- Hibernate实体映射——单边的一对多关系
- 注解方式实现 Hibernate 的双向一对多关系的映射