您的位置:首页 > 其它

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

2014-08-25 15:02 483 查看
单边多对一与单边一对多关系相反,多的一方有一方的引用,一方没有多方引用。

例如:论文与论文类别

表type(一方)

idint
namevarchar(20)
表article(多方)

idint
type_idint
contentstext
namevarchar(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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: