在日常系统建模经常会碰到两个实体之间一对多的关系,比如,用户和联系人的关系,如一个用户可以有0个或多个联系人,而一个联系人必须且只能属于一个用户。这样用户和联系人就形成了一对多的关系。Hiber
ate中的集合类型A、set使用set元素映射javautilSet。使用javautilHashSet初始化集合。它的元素顺序没有保存,并且不允许重复元素。这在典型的hiber
ate应用程序中是最常见的持久化集合。可以使用set映射javautilSortedSet,sort属性可以设置成比较器或者用于内存排序且的自然顺序。使用javautilTreeSet实例初始化集合。B、list可以使用list映射javautilList在集合表中用一个额外的索引列保存每个元素的位置。使用javautilArrayList初始化。C、bagidbag可以使用bag或者idbag映射javautilCollectio
Java没有Bag接口或者实现。然而,javautilCollectio
允许包语义可能的重复,不保存元素顺序。Hiber
ate支持持久化的包它内部使用列表,但是忽略元素的索引。使用javautilArrayList初始化包集合。D、map可以使用map映射javautilMap,保存键值对。使用javaHashMap初始化属性可以使用map元素映射javautiSortedMap且sort属性可以设置为比较器或者用于内存排序的自然顺序。使用javautilTreeMap实例初始化该集合。E、primitivearrayarrayhiber
ate使用primitivearray对于Java基本的值类型和array对于其他的一切支持数组。但是它们很少用在领域模型中,因为hiber
ate无法包装数组属性。没有字节码基础设施,就失去了延迟加载,以及为持久化集合优化过的脏检查,基本的便利和性能特性A、用Set实现集合
用Set实现pojo类的属性类型,使用set标签来实现映射。范例1:1数据库
这种一对多关系在数据库中一般利用外键来实现。以下是以postgresql数据库为例。
CREATETABLEusersuser_idi
t4NOTNULLDEFAULT
extvalusers_user_id_seqregclasscha
getimestampuser
amevarchar128NOTNULLCONSTRAINTusers_pkeyPRIMARYKEYuser_idCREATETABLEco
tactco
tact_idi
t4NOTNULLDEFAULT
extvalco
tact_co
tact_id_seqregclassuser_idi
t4co
tact_
amevarchar128CONSTRAINTpk_co
tactPRIMARYKEYco
tact_idCONSTRAINTfk_co
tact_user_idFOREIGNKEYuser_idREFERENCESusersuser_idMATCHSIMPLE
fONUPDATECASCADEONDELETECASCADE
2Pojo类
这里主要为了说明集合映射,故只实现单向一对多的关系。如下例所使用的Set。当然我们也可使用List,Map,Array等
publicclassMailUserprivatei
tuserIDprivateStri
guserNameprivateSetCo
tactco
tactspublicclassCo
tactprivatei
tco
tactIDprivateMailUsermailUserprivateStri
gco
tactName3配置r