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

单边一对多关系是指一方有集合属性,包含多个多方,而多方没有一方的引用。比如典型的用户与电子邮件。

表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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值