- Hibernate集合映射Set篇
-
集合映射
我们通过一个具体示例看一下如何在Hibernate中使用集合映射。
例如:在一个购物网站中,需要有个用户表用来记录用户的基本信息,这张表包括用户的ID,姓名以及邮寄地址,但是有些人可能有多个邮寄地址,这时在数据库中我们需要使用另外一张表单独存储用户的邮寄信息,在这张表中使用UserId作为用户表的一个外键,从而实现两张表之间的关联。
这里我们使用Hibernate的自动建表机制,不在数据库中创建相应的数据表。
要实现自动建表需要在Hibernate.cfg.xml文件中添加如下属性
1<propertyname="hbm2ddl.auto">update</property>首先创建用户类,用户类中有id属性,姓名属性和存放收货地址的属性,因为收货地址有多个所以不能使用String类型,所以考虑使用集合类型,因此创建具体类如下:
12345678910111213package entity;import java.util.HashSet;import java.util.Set;publicclass TUser{privateintid;private Stringname;privateSet<String> userAddresses = new HashSet<String>();//省略get/set方法}然后写TUser类的具体映射配置文件。
在Hibernate中要通过用户表中映射文件访问到集合表需要知道一下信息
1、 集合表的名称(表名称)
2、 集合表中的外键(集合外键)
3、 集合表中的元素列(集合元素)
然后看具体配置代码
1234567891011121314151617<hibernate-mapping><classname="entity.TUser"table="T_USER"schema="MYHR"><idname="id"type="int"><columnname="ID"precision="22"scale="0"/><generator class="assigned"/></id><propertyname="name"type="string"><columnname="NAME"not-null="true"/></property><setname="userAddresses"table="USER_ADDRESS"><key><columnname="USERID"not-null="true"/></key><element type="string"column="address"></element></set></class></hibernate-mapping><set>标签用于指定集合映射,其name属性用于指定POJO类中Set类型数据属性名,table用于指定其关联的数据表。
<key>标签用于指定关联表的外键。<element>用于指定关联表中其他属性。
下面看一下测试代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package Test;import java.util.HashSet;import java.util.Set;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import entity.TUser;import SessionFactory.HibernateSessionFactory;publicclass Test {private Session session =null;privateTransactiontran =null;@org.junit.Testpublicvoid test() {Set<String>set= new HashSet<String>();set.add("地址一");set.add("地址二");session = HibernateSessionFactory.getSession();tran = session.beginTransaction();try {TUseruser= new TUser();user.setId(2);user.setName("张三");user.setUserAddresses(set);session.save(user);tran.commit();} catch (Exception e) {tran.rollback();} finally {HibernateSessionFactory.closeSession();}}@org.junit.Testpublicvoid get() {session = HibernateSessionFactory.getSession();String hql ="FROM TUser t where t.id=1";Query query = session.createQuery(hql);TUseruser= (TUser) query.uniqueResult();System.out.println(user.getName());}}然后通过数据库查询即可查询到相应数据。
-
本文详细介绍了如何在Hibernate中使用集合映射实现购物网站中用户地址的多对多关联关系,包括自动建表、类与映射配置、测试代码解析,以及如何通过用户表访问到集合表。
我要投稿
1004

被折叠的 条评论
为什么被折叠?



