文档章节

hibernate 集合注解

t
 tibetxin
发布于 2017/07/17 16:15
字数 1075
阅读 18
收藏 0

当持久化中有一个属性是集合(Set、List、Map),就要用到集合映射。集合属性会单独生成一张表 集合属性都要用到的注解: @ElementCollection(fetch="该属性的加载策略",targetClass="集合中元素的类型")。 fetch=FetchType.EAGER: 立即加载 fetch=FetchType.LAZY: 延迟加载 @CollectionTable(name="表名") : 指定集合生成表的相关信息。

1.1 List集合映射(有序集合): 属性:@OrderColumn() 指定排序列 1.1.2 List<Address> : 集合中元素是复合类型。复合属性类上需要加注解:@Embeddable。

package edu.scut.e_CollectionMapping_List;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;

@Entity
@Table(name="PER_INFO")
public class Person {
	@Id
 	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
  	private String name;
	
	@ElementCollection(fetch=FetchType.LAZY, //加载策略
  			targetClass=Address.class) //指定元素中集合的类型
	@CollectionTable(name="PER_ADD_INFO") //指定集合生成的表
	 @OrderColumn(name="O_A_ID") //指定排序列的名称
 	private List<Address> address = new ArrayList<Address>();
  	public int getId() {
  		return id;
 	}
 	public void setId(int id) {
 		this.id = id;
  	}
 	public String getName() {
  		return name;
  	}
 	public void setName(String name) {
 		this.name = name;
  	}
	public List<Address> getAddress() {
   		return address;
  	}
 	public void setAddress(List<Address> address) {
   		this.address = address;
 	}
}

1.2 Set集合映射(无序集合) 注意: Set集合生成表的主键列:(外键列 + Set集合的元素列 .. ) 1.2.1· Set<String> : 集合中元素是标量类型 8个基本类型、包装类、String。 例如:Employee类

package edu.scut.e_CollectionMapping_Set;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.*;

@Entity
@Table(name="EMP_INFO")
public class Employee implements Serializable {
 	@Id
 	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
 	private String name;
 	private int age;
	
	@ElementCollection(fetch=FetchType.LAZY, //加载策略,延迟加载
 			targetClass=String.class) //指定集合中元素的类型
	@CollectionTable(name="ADD_INFO") //指定集合生成的表
	@Column(nullable=false) //添加非空约束
 	private Set<String> address = new HashSet<String>();
	public int getId() {
 		return id;
	}
 	public Set<String> getAddress() {
 		return address;
 	}
	public void setAddress(Set<String> address) {
  		this.address = address;
  	}

 	public void setId(int id) {
 		this.id = id;
  	}
 	public String getName() {
 		return name;
 	}
   	public void setName(String name) {
  		this.name = name;
  	}
 	public int getAge() {
  		return age;
  	}
   	public void setAge(int age) {
  		this.age = age;
   	}
}

1.2.2 Set<Address> : 集合中元素是复合类型。 复合属性类上需要加注解:@Embeddable Set集合生成表默认是没有主键列的。如果想要生成主键列,需要为Set集合的元素类的属性上添加非空约束! 例如:Person类 package edu.scut.e_CollectionMapping_Set;

import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.*;

@Entity @Table(name="PER_INFO") public class Person { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name;

@ElementCollection(fetch=FetchType.LAZY, //加载策略
		targetClass=Address.class) //指定元素中集合的类型
@CollectionTable(name="PER_ADD_INFO") //指定集合生成的表

private Set<Address> address = new HashSet<Address>();
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public Set<Address> getAddress() {
	return address;
}
public void setAddress(Set<Address> address) {
	this.address = address;
}

} Address类

package edu.scut.e_CollectionMapping_Set;

import javax.persistence.Column;
import javax.persistence.Embeddable;

@Embeddable
public class Address {
	//@Column(nullable=false)
	private String zip;
	@Column(nullable=false)
	private String info;
	public String getZip() {
		return zip;
	}
	public void setZip(String zip) {
		this.zip = zip;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}

1.3 Map集合映射(有Map的key): @MapKeyColumn() 指定Map的key生成的列 注意: Map集合生成表的主键列:(外键列 + Map的Key) 1.3.1 Map<String, String> : 集合中元素是标量类型 8个基本类型、包装类、String。

例如:Employee类

package edu.scut.e_CollectionMapping_Map;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.persistence.*;

@Entity
@Table(name="EMP_INFO")
public class Employee implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
 	private String name;
	private int age;
	
 	@ElementCollection(fetch=FetchType.LAZY, //加载策略,延迟加载
			targetClass=String.class) //指定集合中元素的类型
 	@CollectionTable(name="ADD_INFO") //指定集合生成的表
	@MapKeyColumn(name="M_KEY") //指定map的key生成的列
 	private Map<String, String> address = new HashMap<String, String>();
 	public int getId() {
 		return id;
	}
	public Map<String, String> getAddress() {
 		return address;
 	}
	public void setAddress(Map<String, String> address) {
 		this.address = address;
 	}
  	public void setId(int id) {
		this.id = id;
	}
  	public String getName() {
 		return name;
 	}
 	public void setName(String name) {
		this.name = name;
  	}
  	public int getAge() {
 		return age;
 	}
  	public void setAge(int age) {
  		this.age = age;
	}
}

1.3.2 Map<String, Address> : 集合中元素是复合类型。 复合属性类上需要加注解:@Embeddable

例如:Person类

package edu.scut.e_CollectionMapping_Map;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.persistence.*;

@Entity
@Table(name="PER_INFO")
public class Person {
 	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
 	private int id;
 	private String name;
 	
  	@ElementCollection(fetch=FetchType.LAZY, //加载策略
 			targetClass=Address.class) //指定元素中集合的类型
  	@CollectionTable(name="PER_ADD_INFO") //指定集合生成的表
 	@MapKeyColumn(name="ADD_KEY") //指定key生成的列
	private Map<String,Address> address = new HashMap<String,Address>();
  	public int getId() {
 		return id;
  	}
	public void setId(int id) {
 		this.id = id;
 	}
 	public String getName() {
 		return name;
  	}
 	public void setName(String name) {
  		this.name = name;
	}
 	public Map<String,Address> getAddress() {
  		return address;
 	}
 	public void Address(Map<String,Address> address) {
  		this.address = address;
  	}
}

Address类

package edu.scut.e_CollectionMapping_Map;

import javax.persistence.Column;
import javax.persistence.Embeddable;

@Embeddable
public class Address {
	//@Column(nullable=false)
	private String zip;
	@Column(nullable=false)
	private String info;
	public String getZip() {
		return zip;
	}
	public void setZip(String zip) {
		this.zip = zip;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}

本文转载自:http://blog.csdn.net/qq_29829081/article/details/51055535

t
粉丝 0
博文 1
码字总数 0
作品 0
沙坪坝
私信 提问
Hibernate框架学习之注解映射实体类

前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识。然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了...

Single_YAM
2017/11/13
0
0
[Hibernate]有关jar文件

Hibernate的发布版本可以在SourceForge上下载到,比如: http://sourceforge.net/projects/hibernate/files/hibernate3/ 下载到的文件集合中,hibernate3.jar是Hibernate核心类的集合,要使用...

LeoXu
2014/06/27
0
0
史上最简单的Hibernate4视频教程(附源码和笔记)

Hibernate4是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合...

2846613430
2016/04/08
1K
0
Hibernate与Jackson

当有一对多,多对一等关联关系时,用Hibernate查询并以Jackson转成Json 比如持久化类User public class User implements java.io.Serializable{ private string id; private Set usertorole...

lreach
2016/10/28
0
0
Hibernate使用技巧

如何定义实体 持久化策略(或许也是整个应用)中最重要的就是实体定义。所有的对象都是从核心对象集合中繁衍而来的,因此正确的定义实体是非常重要的。下面是构建Hibernate/JPA实体方面我的一...

白志华
2015/09/28
56
0

没有更多内容

加载失败,请刷新页面

加载更多

texlive安装

Installing to: D:/bin/texlive/texlive/2019Installing [001/307, time/total: ??:??/??:??]: adobemapping [2130k]Installing [002/307, time/total: 00:03/08:57]: ae [84k]Installing......

MtrS
48分钟前
2
0
运维规范

命名规范 发布流程 监控告警 故障定位 状态 日志 监控

以谁为师
今天
2
0
约瑟夫环(报数游戏)java实现

开端 公司组织考试,一拿到考题,就是算法里说的约瑟夫环,仔细想想 以前老师将的都忘了,还是自己琢磨把~ package basic.gzy;import java.util.Iterator;import java.util.LinkedList;...

无极之岚
今天
3
0
Kernel字符设备驱动框架

Linux设备分为三大类:字符设备,块设备和网络设备,这三种设备基于不同的设备框架。相较于块设备和网络设备,字符设备在kernel中是最简单的,也是唯一没有基于设备基础框架(device结构)的...

yepanl
今天
3
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部