hibernate映射

hibernate映射

集合属性大致分为二种:

单纯的集合属性,像List,Set或数组等集合属性。

2,Map集合属性,每个属性值多有相对应的Key映射。

集合映射属性分为以下几种:

List:用于映射List集合属性,List是有序的,可重复的.

Set:用于映射Set集合属性,Set是无序的,不可重复.

Map:用于映射Map集合属性,具有键值对属性(Key ,value);

Array:用于映射数组集合属性.为有序可重复.

Bag:用于应映射无序集合属性,当我们用Bag作映射时,我们定义集合时,我们不应当使用具体的集合,而是用集合的父类接口:Collection.



相对几种集合的应用:

List:

由于他是有序的集合,因此用Hibernate持久化到数据库中时,"必须增加到例表示集合的顺序"~,集合属性只能以接口形式声明,因为当Hibernate持久化某个实例时, Hibernate会自动把集序中的集合实现类替换成Hibernate自己的实现类。代码 如下:

private int id;

private int age;

private String name;

private List<Person> schools;

那么我们如何来映射集合中的元素到数据库中呢?在hibernate的映射文件中,我们可以增加对<list></list>标签来完成,实际如下:

<list name="schools" table="school_table">//table是我们指定的把集合元素映射到哪个表中.

<key column="person_id"></key>//这里是指出主表的外键是哪个,这里我们用主键例来映射,一般开发也是这样做。(主表的外键可认为是子表的主键)

//主表与子表之间的关联就是通过外键来维持的,

<list-index column="school_indext"></list-index>//用来指定集合的序列,因为list集合是有序的,这也就是我们上面提到的要必须增加的一例

<element column="school" type="string" length="30"></element>//这个标签是把list里的元素一个一个放到column指定的例名下,type指定放入的类形 </list>





Array:数组的方式与List的完全一样,只要把标签改成<array></array>就可



Set:与List,Array一样,只是Set是无序的,在<set></set>里不用indext标签就可以了.

Bag:使用bag映射集合时,对于Set集合不好用,这是唯一的要点,对于List,Array,多没有问题。

同时,不管是哪种集合,使用bag映射之后多会变为无序的集合,而集合属性对应的表没有主键.

Map:Map不仅要映射属性值,还要映射属Key,也就是key,value多要映射。Hibername将会以外键和key例作为联合主键.

<map name="scores">

<key column="student_id"></key>

<map-key type="string" column="subject" length="10"></map-key>//必须指明类型,用于映射Map的key

<element type="int" column="score" length="3" not-null="true"></element>//也要指明类型,用来映射Map的value.

</map>





映射组件属性:

组件属性的意思是持久化类的属性不是基本数据类型,也不是String类型,而是某个组件的变量,该组件属性类型可以是自定义类型.

然后hibernate不能直接用property映射,为了映射组件属性,hibernate提供了component无系。每个component元素映射一个组件,组件属性必须指定该属性的类形.

Component元素中的class属性用于确定组类的类型.

组件的一个浅显例子,一个工人,他有月薪,年薪,带薪休候,这些是就可以做一个组件放到一起。组件是一个没有ID的类。

<component name="pay" class="Pay">

<property name="monthlPay" column="month_pay"></property>

<property name="yearlPay" column="year_pay"></property>

<property name="vocationWithPay" column="vactionwith_pay"></property>

</component>





集合映射组件属性:

集合除了存放String 字符串以外,还可以存放组件类形,实际上更多情况下,集合组件存放的都是组件类型.这时我们就要用到composite-element子元

素来映射集合元素,刚时还要class来指定元素的类型.用property来指定组件类型的子属性.

<list name="jobHistories" table="job_table">

<key column="worker_id"></key>

<list-index column="job_index"></list-index>

<composite-element class="Job">

<property name="position" column="position_name"></property>

<property name="company" column="company_name"></property>

<property name="starting" column="`starting`" type="date"></property>

<property name="ending" column="`ending`" type="date"></property>

</composite-element>

</list>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin_lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值