集合映射
我们通过一个具体示例看一下如何在hibernate中使用集合映射。
例如:在一个购物网站中,需要有个用户表用来记录用户的基本信息,这张表包括用户的id,姓名以及邮寄地址,但是有些人可能有多个邮寄地址,这时在数据库中我们需要使用另外一张表单独存储用户的邮寄信息,在这张表中使用userid作为用户表的一个外键,从而实现两张表之间的关联。
这里我们使用hibernate的自动建表机制,不在数据库中创建相应的数据表。
要实现自动建表需要在hibernate.cfg.xml文件中添加如下属性
update
首先创建用户类,用户类中有id属性,姓名属性和存放收货地址的属性,因为收货地址有多个所以不能使用string类型,所以考虑使用集合类型,因此创建具体类如下:
package entity;import java.util.hashset;import java.util.set;public class tuser{ private int id; private string name; private set useraddresses = new hashset(); //省略get/set方法}
然后写tuser类的具体映射配置文件。
在hibernate中要通过用户表中映射文件访问到集合表需要知道一下信息
1、 集合表的名称(表名称)
2、 集合表中的外键(集合外键)
3、 集合表中的元素列(集合元素)
然后看具体配置代码
标签用于指定集合映射,其name属性用于指定pojo类中set类型数据属性名,table用于指定其关联的数据表。
标签用于指定关联表的外键。用于指定关联表中其他属性。
下面看一下测试代码
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 set = new hashset(); 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()); }}
然后通过数据库查询即可查询到相应数据。
