巴拉巴拉
小魔仙

Hibernate 多主键映射KeyMap 0配置

Hibername如果遇到表为多个主键的时候可能会出现一些问题,于是网上找到了使用Keymap来解决这个问题,做个使用记录。

首先创建一个主键KeyMap类,这个类要实现Serializable接口,并生成serialVersionUID ,构造一个无参的构造函数和一个所有参数的构造函数,要重写equals方法和hashCode方法,以及主键字段的get和set方法。

package com.Test;

import java.io.Serializable;

public class PersonKeyMap implements Serializable{
	private static final long serialVersionUID = 3575342248481678210L;
	
	private String name ;
	private int age;
	
	public PersonKeyMap() {
	}
	
	public PersonKeyMap(String name, int age) {
		this.name = name;
		this.age = age;
	}

	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;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PersonKeyMap other = (PersonKeyMap) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

实体类:使用@IdClass注解

package com.Test;

@Entity
@IdClass(PersonKeyMap.class)
@Table(name = "Person")
public class Person {
	
	@Id
	private String name;
	
    @Id
    @Column(name = "age")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int age;

	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;
	}
}
赞(0) 打赏
如果文章对你有帮助,欢迎你来评价反馈。AgainFly » Hibernate 多主键映射KeyMap 0配置
标签:

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  • Q Q(选填)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏