hibernate 联合主键

 

xml方式处理联合主键:

 

以有两个主键:id和name的student表为例。

先创建个主键类:

 

package com.bjsxt.hibernate;

//黑色为必写项

public class StudentPK implements java.io.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 o) {
        if(o instanceof StudentPK) {
            StudentPK pk = (StudentPK)o;
            if(this.id == pk.getId() && this.name.equals(pk.getName())) {
                return true;
            }
        }
        return false;
    }
   
    @Override
    public int hashCode() {
        return this.name.hashCode();
    }
}

 

写model:

package com.bjsxt.hibernate;

public class Student {
   
    private StudentPK pk;
   
    private int age;
    private String sex;
    private boolean good;
    public boolean isGood() {
        return good;
    }
    public void setGood(boolean good) {
        this.good = good;
    }
    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 StudentPK getPk() {
        return pk;
    }
    public void setPk(StudentPK pk) {
        this.pk = pk;
    }
}

 

映射关系:Student.hbm.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>
    <class name="com.bjsxt.hibernate.Student">
       
           
        <composite-id name="pk" class="com.bjsxt.hibernate.StudentPK">
            <key-property name="id"></key-property>
            <key-property name="name"></key-property>
        </composite-id>
       
        <property name="age" />
        <property name="sex" />
        <property name="good" type="yes_no"></property>
    </class>
   
</hibernate-mapping>

 

 

Annotation(注解)处理联合主键

 

 

三种方法:

将主键类注解为@Embeddable并将model中的属性——主键类的对象注解为@Id

将主键类的对象充当的组件的属性注解为@EmbeddedId,仍然需要主键类。

将类注解为@IdClass(主键类.class ),并将该实体中所有属于主键的属性都注解为@Id

原文地址:https://www.cnblogs.com/flying607/p/3475021.html