XML配置方法
1.新建一个用于存放联合主键的类.
2.配置映射文件
Annotation配置的第二种方法
在domain类中的get存放主键类的方法上,注解为@EmbeddedId
Annotation配置的第三种方法(最适合开发习惯)
1.新建一个存放主键的类
2.在domain类中的主键get方法上,注解为Id(有几个注解几个)
3.注解这个类为@IdClass(com.meiyoudao.domain.PersonPK.class)指定主键类
1.新建一个用于存放联合主键的类.
2.配置映射文件
//新增存放联合主键的类.
//需要实现序列化接口,覆盖hashCode和equals方法
package com.meiyoudao.domain;
import java.io.Serializable;
/**
*
* @author meiyoudao
*
*/
public class PersonPK implements Serializable{
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//需要覆盖hashCode 和 equals方法
@Override
public int hashCode() {
StringBuffer strb = new StringBuffer();
//返回联合主键的hashcode码
//在map数组中能区分
return strb.append(id).append(name).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof PersonPK){
PersonPK o = (PersonPK)obj;
if(o.id == this.id && o.name.equals(this.name)){
return true;
}
}
return false;
}
}
xml代码
<?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="com.meiyoudao.domain">
<class name="Person">
<composite-id name="personPK" class="PersonPK">
<key-property name="id"></key-property>
<key-property name="name"></key-property>
</composite-id>
<property name="weight"/>
</class>
</hibernate-mapping>
Annotation配置的第一种方法
1.新建一个存放主键的类.并声明这个类为@Embeddable
2.在domain类中的get存放主键类的方法上,注解为@Id
package com.meiyoudao.domain;
import java.io.Serializable;
import javax.persistence.Embeddable;
/**
*
* @author meiyoudao
*
*/
@Embeddable//可以被嵌入的
public class PersonPK implements Serializable{
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
//需要覆盖hashCode 和 equals方法
@Override
public int hashCode() {
StringBuffer strb = new StringBuffer();
//返回联合主键的hashcode码
//在map数组中能区分
return strb.append(id).append(name).hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof PersonPK){
PersonPK o = (PersonPK)obj;
if(o.id == this.id && o.name.equals(this.name)){
return true;
}
}
return false;
}
}
package com.meiyoudao.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.TableGenerator;
@Entity
public class PersonAnno {
private String weight;
private PersonPK personPK;
@Id
public PersonPK getPersonPK() {
return personPK;
}
public void setPersonPK(PersonPK personPK) {
this.personPK = personPK;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}
Annotation配置的第二种方法
在domain类中的get存放主键类的方法上,注解为@EmbeddedId
package com.meiyoudao.domain;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.TableGenerator;
@Entity
public class PersonAnno {
private String weight;
private PersonPK personPK;
@EmbeddedId
public PersonPK getPersonPK() {
return personPK;
}
public void setPersonPK(PersonPK personPK) {
this.personPK = personPK;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}
Annotation配置的第三种方法(最适合开发习惯)
1.新建一个存放主键的类
2.在domain类中的主键get方法上,注解为Id(有几个注解几个)
3.注解这个类为@IdClass(com.meiyoudao.domain.PersonPK.class)指定主键类
package com.meiyoudao.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
@Entity
@IdClass(com.meiyoudao.domain.PersonPK.class)
public class PersonAnno {
private int id;
private String name;
private String weight;
@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;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
}