Heim >Datenbank >MySQL-Tutorial >Hibernate集合映射Set篇

Hibernate集合映射Set篇

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 16:03:231196Durchsuche

集合映射 我们通过一个具体示例看一下如何在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>

标签用于指定集合映射,其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<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());
	}

}

然后通过数据库查询即可查询到相应数据。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn