hibernate映射

1.属性为基本数据类型时:

 

@entity表示该pojo为一个实体bean

@table指定持久化类所映射的表,name指定了表的名称

@id表示该字段为主键

@generatedvalue表示生成策略这里用的是自增策略

@column给字段命名

2.当属性中有集合属性时

 

@elementcollection指明了集合属性的类型,此处为string类型

@collectiontable指明了保存集合的表(因为集合属性需要保存到另一个数据表中),name为表的名称,joincolumns是用来映射外键的,这里以person表的id为外键映射,即一个person对应多个学校的名称,nullable表示该列是否为空

@column指明了集合元素的列名

@ordercolumn指明了集合元素索引的列,由于list是有序的因此需要该注解,name为数据库字段的名字,假如list添加了三个string,当saveperson)后则school中有三条记录,也就是一条person对应着三条记录,id列为personidschool_name为添加的stringlist_order0,1,2

注意:关联持久化类也就是person的外键类和集合元素索引列也就是ordercolumnschool的联合主键

当集合为set时,把@ordercolumn去掉就行其他的不变因为set是无序的

当集合为map时,把@ordercolumn去掉,并且增加@mapkeyclasstargetclass=string.class)和@mapkeycolumn(name=”xxx”)前者表示mapkey类型,后者表示key的对应数据库列,而这里的column指代的是mapvalue对应的数据库列

 

3.当属性有其他pojo对象时

(1).第一种情况:当组件属性只有基本数据类型时

持久化类:

 

Pojo对象:

 

在持久化类plane中有个plane对象它不是基本数据类型,而是一个自定义类,因此无法使用@column注解来映射该属性。使用@embeddable注解来指明修饰的类是作为持久化类的组件使用,另外在passenager中有个plane对象owner使用@parent主键表明它指向包含passenager的持久化类即planeplane表会将组件的属性作为列字段插入,因此生成的数据表将有两个字段idpass_name.

(2).当组件属性有集合时:

也就是passengerprivate List<String> schools= new ArrayList<String>();

这里不详细说明了就和2的情况一样,在schools上加上那几个注解就可以,其他的和(1)一样不变

(3).当持久化类中有集合,且集合类型为组件时

也就是plane中有private List<Passenager> passes = new ArrayList<Passenager>();

private Map<String,Passenager> passes = new HashMap<String,Passenager>();

也很简单只要加入2的那几个注解然后删除@column即可因为之前说过组件无法用@column来映射,组件类的注解不需要变

(4)当组件作为mapkey时,(3)是组件作为mapvalue

Plane的注解是一样的写不贴出来了,就这四个@elementcollection--value的类型,@collectiontable@column--映射value的字段,@mapkeyclass--映射key的类型

注意,此时需要重写passenagerequalshashcode方法

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>