文档章节

hibernate使用联合主键

Turman
 Turman
发布于 2015/12/01 17:32
字数 391
阅读 130
收藏 5

创建User类:

@Entity
public class User {

	private UserPK pk;
	
	private int age;
	private String sex;
	private Date birthday;
	private String address;
	private String info;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	
	@Id              //这里将注解改成@EmbeddedId可以将主键类中的@Embeddable注解移除
	public UserPK getPk() {
		return pk;
	}
	public void setPk(UserPK pk) {
		this.pk = pk;
	}
	
	
}

创建主键类:

@Embeddable
public class UserPK implements Serializable{

	private int id;
	private String name;
	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;
	}
	@Override
	public int hashCode() {
		return this.getName().hashCode();
	}
	@Override
	public boolean equals(Object obj) {
		UserPK other = (UserPK)obj;
		
		if (other.getId() == this.getId() && other.getName().equals(this.getName())){
			return true;
		}
		return false;
	}
}

注意添加的注解:

@Embeddable

这里创建的表结构如下:

+----------+--------------+------+-----+---------+-------+

| Field         | Type             | Null   | Key  | Default   | Extra  |

+----------+--------------+------+-----+---------+-------+

| id             | int(11)           | NO    | PRI   | NULL      |           |

| name       | varchar(255)  | NO   | PRI    | NULL      |          |

| address    | varchar(255) | YES   |           | NULL     |          |

| age          | int(11)           | NO   |            | NULL     |         |

| birthday  | datetime       | YES   |           | NULL      |         |

| info         | varchar(255) | YES   |           | NULL     |           |

| sex          | varchar(255) | YES  |            | NULL    |           |

+----------+--------------+------+-----+---------+-------+


另一种方式:

@Entity
@IdClass(UserPK.class)
public class User {
        private int id;
        private String name;
	
	private int age;
	private String sex;
	private Date birthday;
	private String address;
	private String info;
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	
	@Id
	public int getId(){
	        return id;
	}
	public void setId(int id){
	        this.id = id;
	}
	
	@Id
	public String getName(){
	        return name;
	}
	public void setName(String name){
	        this.name = name;
	}
}

这里去除UserPK中的注释即可。




© 著作权归作者所有

共有 人打赏支持
Turman
粉丝 6
博文 36
码字总数 19221
作品 0
杨浦
程序员
私信 提问
Hibernate联合主键映射规则和数据查询原理

Hibernate联合主键的映射规则: 第一种:主键和属性在一个类中 1.配置文件 注:联合主键的主键配置标签用表示。

长平狐
2012/11/12
1K
0
Java程序员从笨鸟到菜鸟之(六十)细谈Hibernate(十一)hibernate复合主键映射

欢迎阅读本专题其他博客: 细谈Hibernate(六)Hibernate继承关系映射 细谈Hibernate(七)Hibernate自身一对多和多对多 细谈Hibernate(八)Hibernate集合Map关系映射 细谈Hibernate(九)h...

长平狐
2012/11/12
201
1
hibernate 关于联合主键

-----------------------------映射文件---------------------------------------------- <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD......

李永china
2016/05/01
35
0
Hibernate(三)——框架中的关系映射

在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系。而Hibernate时间实体类和数据库中的...

凡尘里的一根葱
2015/11/11
0
0
Hibernate的学习笔记(4)

通过前段时间的学习,hibernate的映射关系尤为重要,需要理解的也有挺多的。 1、一对一映射 1)主键关联。一对一默认使用的是立即加载,如果需要时用延迟加载,那么需要在one-to-one元素中将...

larch
2012/07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mysql(Mariadb)数据库主从复制

Mysql(Mariadb)数据库主从复制 Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作...

linuxCool
13分钟前
0
0
redux入门

Redux是什么? 一个状态(State)管理器,集中管理应用中所有组件的状态。 所有组件的状态保存在一个对象里。 虽然Redux与React没有任何直接关系,但是Redux的主要用途(几乎是唯一用途)是为...

粒子数反转
13分钟前
0
0
Js base64 to unit8 array

原地址 var BASE64_MARKER = ';base64,';function convertDataURIToBinary(dataURI) { var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; var base64 = ......

lemos
29分钟前
0
0
单机版hue安装

MacOS环境,单机版。 第一步: git clone https://github.com/cloudera/hue.git 第二步: cd hue 第三步: xcode-select --installsudo installer -pkg /Library/Developer/CommandLineTo......

RippleChan
31分钟前
0
0
【抢购/秒杀】redis实现高并发下的抢购/秒杀功能

问题: 抢购/秒杀是如今很常见的一个应用场景,那么高并发竞争下如何解决超抢(或超卖库存不足为负数的问题)呢? 常规写法: 查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但...

echojson
36分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部