Maison >base de données >tutoriel mysql >Hibernate集合映射Set篇
集合映射 我们通过一个具体示例看一下如何在Hibernate中使用集合映射。 例如:在一个购物网站中,需要有个用户表用来记录用户的基本信息,这张表包括用户的ID,姓名以及邮寄地址,但是有些人可能有多个邮寄地址,这时在数据库中我们需要使用另外一张表单独存
集合映射
我们通过一个具体示例看一下如何在Hibernate中使用集合映射。
例如:在一个购物网站中,需要有个用户表用来记录用户的基本信息,这张表包括用户的ID,姓名以及邮寄地址,但是有些人可能有多个邮寄地址,这时在数据库中我们需要使用另外一张表单独存储用户的邮寄信息,在这张表中使用UserId作为用户表的一个外键,从而实现两张表之间的关联。
这里我们使用Hibernate的自动建表机制,不在数据库中创建相应的数据表。
要实现自动建表需要在Hibernate.cfg.xml文件中添加如下属性
<property name="hbm2ddl.auto">update</property>
首先创建用户类,用户类中有id属性,姓名属性和存放收货地址的属性,因为收货地址有多个所以不能使用String类型,所以考虑使用集合类型,因此创建具体类如下:
package entity; import java.util.HashSet; import java.util.Set; public class TUser{ private int id; private String name; private Set<String> userAddresses = new HashSet<String>(); //省略get/set方法 }
然后写TUser类的具体映射配置文件。
在Hibernate中要通过用户表中映射文件访问到集合表需要知道一下信息
1、 集合表的名称(表名称)
2、 集合表中的外键(集合外键)
3、 集合表中的元素列(集合元素)
然后看具体配置代码
<hibernate-mapping> <class name="entity.TUser" table="T_USER" schema="MYHR"> <id name="id" type="int"> <column name="ID" precision="22" scale="0" /> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="NAME" not-null="true" /> </property> <set name="userAddresses" table="USER_ADDRESS" > <key> <column name="USERID" not-null="true" /> </key> <element type="string" column="address"></element> </set> </class> </hibernate-mapping>
下面看一下测试代码
package 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; public class Test { private Session session = null; private Transaction tran = null; @org.junit.Test public void test() { Set<String> set = new HashSet<String>(); set.add("地址一"); set.add("地址二"); session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try { TUser user = 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.Test public void get() { session = HibernateSessionFactory.getSession(); String hql = "FROM TUser t where t.id=1"; Query query = session.createQuery(hql); TUser user = (TUser) query.uniqueResult(); System.out.println(user.getName()); } }
然后通过数据库查询即可查询到相应数据。