Hibernate 5.3(三)

本文详细介绍了Hibernate 5.3中组件映射的使用,包括映射组件属性、组件属性为集合、集合属性元素是组件、组件作为Map的索引以及组件作为复合主键的情况。通过示例展示了如何使用等元素进行映射配置,并强调了注意事项,如需避免无限循环的集合组件映射。
摘要由CSDN通过智能技术生成

映射组件属性

映射组件属性定义

组件属性,看到组件,你肯定就会想到是由一系列东西组成的东西,才可以称之为组件吧。

组件属性的意思是: 持久化类的属性并不是基本数据类型,也不是字符串、 日期等标量类型的变量,而是一个复合类型的对象, 在持久化的过程中,它仅仅被当做值类型, 而并非引用另一个持久化实体。

为了映射组件属性,Hibermate提供了<component…>元素,每个<component…>元素映射一一个组件属性。使用<component…>元素映射组件属性时需要指定-一个name属性,用于指定该组件属性的名称。除此之外,使用<component…/> 元素还需要如下几个可选属性。

  • class: 指定组件类的类名。如果不指定该属性,Hibernate将通过反射来得到该组件的类型。
  • insert:指定被映射的字段是否出现在SQL的insert语句中。
  • update:指定被映射的字段是否出现在SQL的update语句中。
  • access : 指定Hibernate访问该组件属性的访问策略,默认是property。
  • lazy: 设置该组件是否在持久化对象第–次被访问时启用延迟加载,该属性默认是true。
  • optimistic-ock: 设置更新该组件属性是否需要获取乐观锁,如果该属性设置为true,则当修改该组件属性时,持久化对象的版本号会增加。
  • unique:指定是否在该组件映射的所有字段上添加唯一性约束。(对应到数据库,就是创建了一个索引)

一个 自定义类通常还包括其他属性,因此还应该为<componen…/>兀素增加<property…>子兀素来映射组件属性的子属性。此处的<property…> 子元素与<las…/元素里<property…>子元素的用法完全相似,因此当组件类型的属性是基本数据类型、String 类型、 日期类型时,使用<property…/> 元索进行映射。

使用注意

<component…/>: 如果该组件属性里的属性不是基本类型、String 类型、日期类型等, 而是另一个组件类型时,则在<componet…/> 里再次使用<component…>子元素进行映射。

集合映射元素:如果组件类型里的属性是数组类型、集合类型等,则可以在<componet…/>里使用<se…/>、<lis…/>. <map…/>等子元素来映射这些集合属性。

关联映射元素: 如果组件属性里的属性是另外一个持久化实例的引用,还可以在<component…/>里使用<many-to-one…/>、<one-to-one…/>等 子元素,这就变成Hibernate关联映射。

对于组件属性,Hibernate 组件里的每一个属性添加一个数据列即可。

使用例子
public class Person {
	private Integer id;
	private Integer age;
	private Name name;

	public Name getName() {
		return name;
	}

	public void setName(Name name) {
		this.name = name;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}

public class Name {
	private String first;
	private String last;
	private Person p;// 引用该name的Person 对象

	public Person getP() {
		return p;
	}

	public void setP(Person p) {
		this.p = p;
	}

	public String getFirst() {
		return first;
	}

	public void setFirst(String first) {
		this.first = first;
	}

	public String getLast() {
		return last;
	}

	public void setLast(String last) {
		this.last = last;
	}

}

     <component name="name" class="Name" unique="true" ><!-- name是对应POJO 的属性名 ,class是指定的组件的POJO类-->
     <parent n
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值