您的位置:首页 > 其它

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

2014-08-24 18:35 591 查看
单边一对多关系是指一方有集合属性,包含多个多方,而多方没有一方的引用。比如典型的用户与电子邮件。

表person

idint(自增)
namevarchar(20)
表email

idint(自增)
emailvarchar(20)
person_idint

一、注解方式

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