1. 程式人生 > >(九)Hibernate 的復合主鍵

(九)Hibernate 的復合主鍵

bean blank () 學生 lba nts 多個 try null

一、什麽是復合主鍵?

  • 一張表的主鍵是由多個字段組成,這個主鍵就被稱為復合主鍵。 主鍵是唯一確定某條記錄的字段,比如公民的身份證號就是一個主鍵,因為由身份證號這個主鍵就可以確定
  • 某個公民。 有一種情況,比如學生成績這張表中,一個學號無法唯一確定這個學生的成績,因為這個學生有多科成績,這時候“學號+學科”才是主鍵,兩者結合才能唯一確定一條記錄,也就是成績。

二、hibernate生成含有復合主鍵表的映射bean

  2.1  創建有復合主鍵的表

技術分享 這張表有復合主鍵

  2.2  生成映射文件

技術分享 Hibernate 對含有復合主鍵的表生成bean的時候會把復合主鍵作為單獨的bean獨立生成。

2.3 分析Score和ScoreId bean

技術分享

技術分享

  2.4 分析總映射文件

技術分享

三、對有符合主鍵的bean進行增刪改查操作

案例一 Test_CompositeId.java

package action;

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.Transaction;

import bean.Score;
import bean.ScoreId;
import util.HibernateUtil;

public class Test_CompositeId {

    
public static void main(String[] args) { // Test_CompositeId.select(); // Test_CompositeId.save(); Test_CompositeId.update(); } /** * 查找 */ private static void select() { Session session = null; Transaction tran = null; ScoreId id
= new ScoreId(); id.setUserid(1); id.setSubject("語文"); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); tran = session.beginTransaction(); Score score = (Score) session.get(Score.class, id); System.out.println("成績=" + score.getScore()); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } } private static void save() { Session session = null; Transaction tran = null; ScoreId id = new ScoreId(); id.setSubject("英語"); id.setUserid(1); Score score = new Score(); score.setId(id); score.setScore(100); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); tran = session.beginTransaction(); Serializable primarykey = session.save(score); System.out.println(primarykey); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } } /** * 執行更新操作 */ private static void update() { Session session = null; Transaction tran = null; ScoreId id=new ScoreId(); id.setUserid(1); id.setSubject("英語"); Score score=new Score(); score.setId(id); score.setScore(12); try { session = HibernateUtil.getSessionFactory().getCurrentSession(); tran = session.beginTransaction(); session.update(score); tran.commit(); } catch (Exception e) { e.printStackTrace(); tran.rollback(); } } }

所有代碼在這裏 : 鏈接

(九)Hibernate 的復合主鍵