hibernate中对集合属性的操作
在hibernate中,持久化对象中不仅仅有基本数据类型与类类型的属性,也有List,Map,Set,collection等集合属性。但是在这些属性使用中,最好使用的是接口。
Set集合操作:
配置:在Xxx.hbm.xml中<set></set>中配置相关的属性
在<set></set>中常用的标签属性与子元素:
name属性:持久化对象中的set属性的属性名对应
table属性:新建保存该set集合数据的数据表名
key:子元素:在数据库总保存set数据的key/id
element子元素:保存set属性的数据标签,同长都要设置type类型
例子:
<!-- 配置set属 :name值为持久化类中的set的属性名 ,table为保存set的表名 --> <set name="students" table="stus"> <!-- 外键 --> <key column="stu_id"></key> <!-- set保存对象的数据元素,必须指明数据的类型且字符串要用小写 --> <element column="students" type="string"></element> </set>
配置接收之后就可以像一般简单的持久化对象类一样操作数据库了。
List集合操作:
List集合操作与set的操作基本一致。在Xxx.hbm.xml文件中配置了<list></list>标签
<list></list>标签常用的属性与子元素:
name属性:持久化对象中的List属性的属性名对应
table属性:新建保存该集合数据的数据表名
key:子元素:在数据库总保存list数据的key/id
element子元素:保存list属性的数据标签,同长都要设置type类型
list-index:子元素:保存在list的属性保存数据的下标索引
Xxx.hbm.xml文件配置List标签实例
<!-- 配置list属性。name为持久化对象的属性名 table为保存该属性数据的表名 --> <list name="hobbys" table="hobbys_list"> <key column="hobbys_id"></key> <!-- 索引 --> <list-index column="position"></list-index> <!-- 报list属性的数据字段 需要制定类型 --> <element type="string" column="hobbys"></element> </list>
Collection集合的操作:
Collection集合属性在hibernate中的操作也是跟set等操作基本一致。在Xxx.hbm.xml中以<bag></bag>获取是<idbag></idbag>标签中配置。两者标签都能配置Collection属性,但是还是会不一样的。
主要的区别:使用<bag></bag>标签时候,在使用hibernate修改Collection属性的表时候,会吧所用数据先删除,在添加不该删除的元素。而<idbag></idbag>则不会
Collection的常用属性与子元素:
name属性:持久化对象中的set属性的属性名对应
table属性:新建保存该set集合数据的数据表名
key:子元素:在数据库总保存set数据的key/id
element子元素:保存set属性的数据标签,同长都要设置type类型
Collection_id子元素:只能用于<idbag></idbag>标签。添加Collection属性表的id
Xxx.hbm.xml中的配置实例:
<bag>
<bag name="hobby" table="hobby_collection_bag"> <key column="hobby_id_bag"></key> <element type="string" column="hobbys"></element> </bag>
<idbag>
<idbag name="hobby" table="hobby_collection"> <collection-id type="string" column="ho_id"> <generator class="uuid"></generator> </collection-id> <key column="hobby_id"></key> <element type="string" column="hobby"></element> </idbag>
Map集合的操作:
map属性使用也没有多大的差别,在Xxx.hbm.xml中,使用<map></map>标签配置
<map></map>的常用属性与子元素:
name属性:持久化对象中的map属性的属性名对应
table属性:新建保存该map集合数据的数据表名
key:子元素:在数据库总保存set数据的key/id
element子元素:保存map属性的数据标签,同长都要设置type类型
map-key子元素:map中保存数据的key
Xxx.hbm.xml配置实例:
<map name="hobby" table="hobby_map"> <key column="name"></key> <map-key column="hobby_mapkey" type="string"></map-key> <element column="hobby" type="string"></element> </map>
如果,集合封装的对象是自定义的javabean对象,则是把上面的<element></element>标签换成<one-to-many></one-to-many>在class属性中指定类类名时候,填写的是全路径即可