hibenate 복합 메 인 키

2953 단어 Hibernatexml.net
복합 메 인 키 를 실현 하려 면 먼저 메 인 키 클래스 에서 Serializable 인 터 페 이 스 를 실현 하고 equals 와 hashcode 를 복사 해 야 합 니 다.equals 와 hashCode 의 복사 본 은 제3자 도구 인 comons - lang - 1.0.1. jar 를 사용 할 수 있 습 니 다.
예:
(1) person 표를 만 들 고 메 인 키 는 name 과 phone 입 니 다.
 
create table person(
  name varchar2(30) not null,
  phone varchar2(20) not null,
  age number(30),
  primary key(name,phone) 
)

 
(2) 새 키 클래스 Primary Key. 자바 (Serializable 인 터 페 이 스 를 실현 하고 equals 와 hashcode 를 복사 하 는 것 을 주의 하 십시오)
public class PrimaryKey implements Serializable{
   private String name;
   private String phone;
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getPhone() {
	return phone;
}
public void setPhone(String phone) {
	this.phone = phone;
}
public boolean equals(Object obj) {
	if(obj == null){
		return false;
	}else if(! (obj instanceof CompositePerson)){
		return false;
	}
	PrimaryKey pk = (PrimaryKey)obj;
	new EqualsBuilder().append(this.name, pk.getName()).append(this.phone,pk.getPhone())
	                   .isEquals();
	return true;
}
@Override
public int hashCode() {
	return new HashCodeBuilder().append(this.name).append(this.phone)
	          .toHashCode();
}

}

 (3) 새 person 표 에 대응 하 는 pojo (Person. 자바)
public class Person {
  
	private PrimaryKey primaryKey;
  
	private int age;
	
	public PrimaryKey getPrimaryKey() {
		return primaryKey;
	}
	public void setPrimaryKey(PrimaryKey primaryKey) {
		this.primaryKey = primaryKey;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

 (4) Person. hbm. xml 파일 설정 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="  ">

    <class name="Person" table="Person">
       <composite-id name="primaryKey" class="PrimaryKey">
         <key-property name="name" column="name" type="string"/>
         <key-property name="phone" column="phone"/>
       </composite-id>
       <property name="age" column="age" type="int"/>
    </class>
    
</hibernate-mapping>

좋은 웹페이지 즐겨찾기