Hibernate之映射集合属性

这里先将集合Set在数据库中的存储。就是新建一个表,新建的表的主键对应另一张的外键,而集合的每个值对应一条记录,以同一个set的数据以主键值相同的记录区分。

package test.hibernate.set;

import java.util.Set;

public class User {

	private Integer id;
	private String name;
	private Set<String> addressSet;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Set<String> getAddressSet() {
		return addressSet;
	}

	public void setAddressSet(Set<String> addressSet) {
		this.addressSet = addressSet;
	}

}
package test.hibernate.set;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App {

	private static SessionFactory sessionFactory = new Configuration()//
			.configure()//
			.addClass(User.class)// 添加Hibernate实体类(加载对应的映射文件)
			.buildSessionFactory();

	@Test
	public void testSave() throws Exception {
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		// --------------------------------------------

		// 构建对象
		User user = new User();
		user.setName("李明");
		Set<String> set = new HashSet<String>();
		set.add("广东省");
		set.add("深圳市");
		set.add("福田区");
		user.setAddressSet(set);

		// 保存
		session.save(user);

		// --------------------------------------------
		session.getTransaction().commit();
		session.close();
	}

	@Test
	public void testGet() throws Exception {
		Session session = sessionFactory.openSession();
		session.beginTransaction();

		// 获取数据
		User user = (User) session.get(User.class, 1);

		// 显示数据
		System.out.println(user.getId());
		System.out.println(user.getName());
		System.out.println(user.getAddressSet());

		session.getTransaction().commit();
		session.close();
	}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="test.hibernate.set">
	<class name="User" table="t_user">

		<id name="id">
		   <generator class="native"></generator>
		</id>

		<property name="name" />
		<!-- addressSet属性是Set类型 -->
		<set name="addressSet" table="user_addressSet">
		   <key column="userId"></key>
		   <element type="string" column="address"></element>
		</set>
	</class>
</hibernate-mapping>

注意set的映射

连续加载两次的结果

版权声明:本文为博主原创文章,未经博主允许不得转载。http://blog.csdn.net/lindonglian

时间: 2024-10-22 21:53:34

Hibernate之映射集合属性的相关文章

浅谈Hibernate中映射集合属性以及主键和外键

首先说明一下什么叫主键以及外键. 主键和外键是对于数据库来说的,数据库的表才有主键外键的说法. 主键:主键是指标识某个表中唯一且非空的一条记录行的列,这个列中的值不允许有重复的值,用于确定一个表中的一条记录,实际上主键就是告诉别人:这个数据列是唯一的. 外键:引用另外一个表中的主键,在当前表中不一定为唯一的,但是在被引用表中一般唯一.对于关系型数据库来说(比如MySQL)外键是联系数据表之间的唯一方式,主要目的是控制存储在外键表中的数据. 建立外键的前提:本表的列必须与外键类型相同(外键必须是外

(转)Hibernate框架基础——映射集合属性

http://blog.csdn.net/yerenyuan_pku/article/details/52745486 集合映射 集合属性大致有两种: 单纯的集合属性,如像List.Set或数组等集合属性. Map结构的集合属性,每个属性值都有对应的Key映射. 集合映射的元素大致有如下几种: list:用于映射List集合属性. set:用于映射Set集合属性. map:用于映射Map集合性. array:用于映射数组集合属性. bag:用于映射无序集合. idbag:用于映射无序集合,但为集

hibernate映射集合属性

注意:持久化集合字段必须声明为接口,两个持久化对象不能共享同一个集合元素的引用. 映射集合属性 @ElementCollection{ fetch targetClass } 映射集合属性表 @CollectionTable{ name catalog schema indexes joinColumns uniqueConstraints } @JoinColumn{ columnDefinition name insertable updatable nullable table uniqu

1-6 hibernate映射集合属性

1.集合类框架 以Tree开头都是按顺序,默认情况下是升序排列. 以Linked 开头的都是按插入顺序排列的. 2.在hibernate中要持久化集合属性时必须将其声明为接口,如 private Set parts=new HashSet(); set元素 3.集合类接口及其常用的实现类: 4.map元素的映射 5.集合外键

hibernate注解映射属性

https://blog.csdn.net/dada678/article/details/51786201 1.普通属性 @Entity:修饰的持久化类的所有属性都会被映射到底层数据库. @Column:修饰属性 @Transient:修饰不想持久化保存的属性. @Lob:修饰大数据属性. 当属性为byte[].Byte[]时数据库对应Blob 当属性为char[].character[].String时,对应为Clob. @Temporal修饰日期类型 支持TemporalType.DATE

Hibernate关联映射(3) 2016-07-12

接上篇,开始一对多单向关联.由于多对一的单向关联已经在(1)中说过,就不再说了,主要思想就是一对一是使用了more-to-one多对一的特殊形式,利用unique="true"转换成特殊的一对一来使用. 说明:一对多仍然使用person和address的例子.在一对多单向关联的例子中,一个person可以有多个address,所以在person类中有一个set集合属性的成员变量,集合里面存的是address类型的变量. 一对多外键 单向关联 由于是一个person可以有多个addres

Hibernate关联映射(4)2016-07-13

继续今天理解一对多(多对一)双向关联.由于是双向关联,所以一对多和多对一是同一种情况. 还是用person和address的例子.一个person有多个address.这次有点复杂,把实体类的结构贴出来: public class Person1nfk_sx implementsSerializable { private int personid; private String name; private int age; private Set addresses=new HashSet()

Hiberbate 集合属性

Hibernate 要求声明集合属性只能用 Set.List.Map.SortedSet.SortedMap 等接口,而不能用 HashSet.ArrayList.HashMap.TreeSet.TreeMap 等实现类,其原因就是因为 Hibernate 需要对集合属性进行延迟加载,而 Hibernate 的延迟加载是依靠 PersistentSet.PersistentList.PersistentMap.PersistentSortedMap.PersistentSortedSet 来完成

6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)

单向多对一的关联关系 具体体现:n的一方有1的引用,1的一方没有n的集合属性 举个例子:订单Order和顾客Customer是一个单向多对一的关联关系.Order是n的一方,有对Customer的引用:而Customer作为1的一方却没有Order的集合属性. 主要是对n的一方使用@ManyToOne和@JoinColumn注解.而1的一方不需要做任何修改.具体的映射方法: 1.采用@ManyToOne注解映射多对一的关联关系,默认情况下采用“左外连接”的方式进行加载.可以通过配置@ManyTo