(九)Hibernate 的复合主键

一、什么是复合主键? 

  • 一张表的主键是由多个字段组成,这个主键就被称为复合主键。  主键是唯一确定某条记录的字段,比如公民的身份证号就是一个主键,因为由身份证号这个主键就可以确定
  • 某个公民。   有一种情况,比如学生成绩这张表中,一个学号无法唯一确定这个学生的成绩,因为这个学生有多科成绩,这时候“学号+学科”才是主键,两者结合才能唯一确定一条记录,也就是成绩。

 

二、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();
        }

    }

}

 

所有代码在这里 :  链接

 

转载于:https://www.cnblogs.com/shyroke/p/6850387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值