Hibernate联合主键

一。联合主键

mysql的联合主键:用2个字段(或者多个字段,后面具体都是用2个字段组合)来确定一条记录,说明,这2个字段都不是唯一的,2个字段可以分别重复,这么设置的好处,可以很直观的看到某个重复字段的记录条数。

二。联合主键的实现

1.将联合主键的字段单独放在一个类中,该类需要重写equals和hashcode方法。
2.在主类中(该类包含联合主键类中的字段)将联合主键字段都注解为@Id。
3.最后在该类上加上注解:@IdClass(联合主键类.class),用来关联主键类。

teacher类

@Entity
@Table(name="teacher")
//联合主键
@IdClass(TeacherPK.class)
public class Teacher {

	private int id;
	private String name;
	private String title;
	private String yourWifeName;
	private Date birthDay;
	private ZheCheng ZheCheng;
	//枚举的映射
	@Enumerated(EnumType.STRING)
	public ZheCheng getZheCheng() {
		return ZheCheng;
	}
	public void setZheCheng(ZheCheng zheCheng) {
		ZheCheng = zheCheng;
	}
	//将date的时间和日期分开
	@Temporal(TemporalType.DATE)
	public Date getBirthDay() {
		return birthDay;
	}
	public void setBirthDay(Date birthDay) {
		this.birthDay = birthDay;
	}
	//不需要写到数据库中的字段
	@Transient
	public String getYourWifeName() {
		return yourWifeName;
	}
	public void setYourWifeName(String yourWifeName) {
		this.yourWifeName = yourWifeName;
	}

	@Id
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
//	//字段名和属性名不一样
//	@Column(name="_name")
	@Id
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	
	
}

teacherPK类

package com.hibernate.model;

import java.io.Serializable;
//内存满了或系统集群时,服务器发生问题,需要将这台服务器的对象写到另外一台时
//需要实现序列。
public class TeacherPK 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 boolean equals(Object obj) {
		if(obj instanceof TeacherPK){
			TeacherPK pk = (TeacherPK) obj;
			if(this.id==pk.getId()&&this.name.equals(pk.getName())){
				return true;
			}
			
		}
		return false;
	}
	//当对象的一部分内容装在hash表中,首先要查hash表。
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return this.name.hashCode();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值