4、Hibernate 实体关系映射(二、单边多对一关系 注解、xml两种方式)
2014-08-25 15:02
483 查看
单边多对一与单边一对多关系相反,多的一方有一方的引用,一方没有多方引用。
例如:论文与论文类别
表type(一方)
表article(多方)
一、注解方式
配置Type类
Type实体类的Java注解比较简单。由于没有Ariticle的引用,Type就是最普通的POJO实体,主键为id属性,只有一个String类型的普通属性name。这里name属性配置为unique,保证数据库中不会重复出现数据。
配置Article类
Article中有一个Type类型的属性。该属性将被配置为ManyToOne的。Article中配置了级联操作为PERSIST,如果Type对象没有被持久化,则持久化Article对象是会一并持久化Type对象。由于contents字段内容可能比较长,因此配置contents列的数据库类型为text。
二、xml方式
配置Type类
使用<class />配置实体类,name属性指定实体类名Type,table属性指定对应的表。<id />配置主键列,<generator />配置主键为数据库自增类型,<property />属性配置普通属性。
配置Article类
注意配置contents属性时type类型配置为TEXT,表示大文本类型。使用<many-to-one />配置多对一关系,name属性指定实体类中对应的属性,column指定外键列,cascade指定级联保存选项,这里设置为persist,表示持久化时保存Type属性。not-found属性为ignore,表示如果Type不存在,则忽略,默认会抛出异常。
例如:论文与论文类别
id | int |
name | varchar(20) |
id | int |
type_id | int |
contents | text |
name | varchar(20) |
配置Type类
Type实体类的Java注解比较简单。由于没有Ariticle的引用,Type就是最普通的POJO实体,主键为id属性,只有一个String类型的普通属性name。这里name属性配置为unique,保证数据库中不会重复出现数据。
@Entity @Table(name = "type") public class Type { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Column(unique = true) private String name; //get set 方法略 }
配置Article类
Article中有一个Type类型的属性。该属性将被配置为ManyToOne的。Article中配置了级联操作为PERSIST,如果Type对象没有被持久化,则持久化Article对象是会一并持久化Type对象。由于contents字段内容可能比较长,因此配置contents列的数据库类型为text。
@Entity @Table(name = "article") public class Article { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @ManyToOne(cascade = {CascadeType.PERSIST}, fetch = FetchType.EAGER) @JoinColumn(name = "type_id") private Type type; private String name; @Column(columnDefinition = "text") private String contents; //get set 方法略 }
二、xml方式
配置Type类
使用<class />配置实体类,name属性指定实体类名Type,table属性指定对应的表。<id />配置主键列,<generator />配置主键为数据库自增类型,<property />属性配置普通属性。
<class name="Type" table="type"> <id name="id" column="id"> <generator class="native" /> </id> <property name="name" /> </class>
配置Article类
注意配置contents属性时type类型配置为TEXT,表示大文本类型。使用<many-to-one />配置多对一关系,name属性指定实体类中对应的属性,column指定外键列,cascade指定级联保存选项,这里设置为persist,表示持久化时保存Type属性。not-found属性为ignore,表示如果Type不存在,则忽略,默认会抛出异常。
<class name="Article" table="article"> <id name="id" column="id"> <generator class="native" /> </id> <property name="name"></property> <property name="contents" type="text"></property> <many-to-one name="type" column="type_id" cascade="persist" lazy="false" not-found="ignore"> </many-to-one> </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 的双向一对多关系的映射