`
meiyoudao
  • 浏览: 87892 次
  • 性别: Icon_minigender_1
  • 来自: 冲脉
社区版块
存档分类
最新评论

联合主键

阅读更多
XML配置方法
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 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;
	}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics