Hibernate(三)Set映射

本文介绍了Hibernate中如何映射Set集合,包括直接映射到数据库字段的简单类型以及自定义类型的映射。通过示例展示了User类、User_hbm.xml配置、HibernateUtil工具类以及Test测试类的使用,涉及hbn_user和hbn_book两张表的模型。

Hibernate映射Set

  其中Set集合中可以放我们自定义的类,也可以是像String、Long、Date等能够直接映射到数据库表字段上的类型,后者相对来说比较简单。
一、List中的元素类型为可以直接映射到字段上的java类型
User类

package test;
public class User {
	private int id;
	private String name;
	private Set<String> books = new HashSet<String>();	
	
}

User_hbm.xml

<hibernate-mapping>
	<class name="test.User" table="hbn_user" >
		<id name="id" type="java.lang.Integer" >
			<generator class="native"></generator>
		</id>
		<property name="name" type="java.lang.String" column="name" length="10"/>
		<set name="books" table="hbn_books" ><!-- 将set中的内容放在hbn_books表 -->
			<!-- hbn_books表中的主键,同时也是参考hbn_user表主键id的外键 -->
			<key column="uid"></key>
			<!--在多的一端,产生一列,用来关联少的一方的id-->
			<element column="book_id" type="string"></element>
		</set>
	</class>
</hibernate-mapping>

HibernateUtil类

public class HibernateUtil {
 
	private static Configuration cfg = null;
	private static SessionFactory factory = null;
	private static Session session = null ;
	
	static {
		init();
	}
 
	public static void init() {
		cfg = new Configuration().configure();
		factory = cfg.buildSessionFactory();
	}
 
	public static Session getSession() {
		if (factory != null){
			return session = factory.openSession();
		}
		
 
		init();
		return session = factory.openSession();
	}
	
	public static void closeSession() {
		if(session!=null && session.isOpen())
			session.close();
	} 
}

Test类

public class Test {
 
	/**
	 * 根据*.hbm.xml文件对应的生成数据库表
	 */
	@Test
	public void testCreateDB() {
		Configuration cfg = new Configuration().configure();
	}
 

	@Test
	public void testSave() throws HibernateException, SerialException,
			SQLException, IOException {
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtil.getSession();
			tx = session.beginTransaction();
			
			User user = new User();
			user.setName("Waylon");
			user.getBooks().add("book1");
			user.getBooks().add("book2");
			session.save(user);
			
			tx.commit();
 
		} catch (HibernateException e) {
			if (tx != null) {
				tx.rollback();
			}
			e.printStackTrace();
			throw e;
		} finally {
			HibernateUtil.closeSession();
		}
	}
 
}

hbn_user表
在这里插入图片描述
hbn_book表
在这里插入图片描述
表模型
在这里插入图片描述
二、Set中的元素类型为自定义
  较为复杂,参考一对多映射的笔记(hibernate四)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值