Hibernate連合プライマリ・キーの実践

2686 ワード

問題の説明:
    1.1つのフィールドがプライマリ・キーとして一意のレコードを識別できない場合は、結合プライマリ・キーとして2つのフィールドが必要です.
    2.プロジェクトの設計の時、往々にして性能、複雑度、時間の方面で、取捨選択をして、“連合の主な鍵”の類は比較的に複雑度のものを増加して、特に需要があります.ここでは連合プライマリ・キーの使用方法を学習するだけなので,これらの問題はしばらく考慮しない.
例説明:studentテーブルにsid、sname、sage、sbirthdayなどのフィールドがあると仮定し、sidとsnameをプライマリキーとして一意のレコードを識別することを実現したい.
モデル内のstudentコードは次のとおりです.ここでのStudentPKは、実際には連合プライマリ・キー・フィールドを含むクラスです.
package com.zk.model;

public class student {
    
	private StudentPK pk;
	
	public StudentPK getPk() {
		return pk;
	}
	public void setPk(StudentPK pk) {
		this.pk = pk;
	}
	private int age;

	
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	

}

Studio PKコードは以下の通りです.以下の3点に注意してください.
1.シリアル番号インタフェースの実装
書かれたjunitテストクラスで保存データを実行する場合、Serializableインタフェースを実装しないとエラーが表示されます.シーケンス化はjavaが提供するオブジェクト状態を保存するメカニズムであり、オブジェクト状態を簡単に保存してから読み取ることができる.一般的には、次のような状況でシーケンス化が必要です.
a)メモリ内のオブジェクトの状態を1つのファイルまたはデータベースに保存したい場合.    
b)ソケットでネットワーク上でオブジェクトを転送したい場合.   
c)RMIを介してオブジェクトを転送したい場合.
2.equalsメソッドの書き換え
ここでは判断条件の制限を増やし,sidとsnameがプライマリキーとしてデータの一意性を保証するためである.
3.hashCodeの書き換え方法
package com.zk.model;

public class StudentPK implements java.io.Serializable {
	private int sid;
	private String sname;
	public int getSid() {
		return sid;
	}
	public void setSid(int sid) {
		this.sid = sid;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	
	@Override //                     。
	public boolean equals (Object o)
	{
		if(o instanceof StudentPK)
		{
			StudentPK pk = (StudentPK)o;
			if(this.sid==pk.getSid()&&this.sname.equals(pk.getSname()))
			{
				return true;
			}
			return false;
		}
		return false;
	}
	@Override 
	public int hashCode(){
		return this.sname.hashCode();
		
	}
	
	
}

テストクラスのコードは次のとおりです.
package com.zk.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.zk.model.StudentPK;
import com.zk.model.student;

public class test_001 {
	
	public static void main(String[]args)
	{
		StudentPK pk = new StudentPK();
		pk.setSid(5);
		pk.setSname("  ");
		
		student s  = new student();
		s.setPk(pk);
		s.setAge(25);
		
	  Configuration cfg = new Configuration();
	  SessionFactory sf =  cfg.configure().buildSessionFactory();//  connection     ;
	  Session session = sf.openSession();//    connection
	  session.beginTransaction();
	  session.save(s);
	  session.getTransaction().commit();
	  session.close();
	  sf.close(); 
	}

}