• (九)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();
            }
    
        }
    
    }

    所有代码在这里 :  链接

  • 相关阅读:
    demo16-打印名字
    demo15-获取标签里面的值
    bufferedReader 读取文件第一行第一个字符丢失问题
    Python的逻辑控制true/false和循环
    python中的对文件的读写
    Python初学习:简单的练习题
    VMware安装的Linux系统忘记密码 怎么修改root密码
    ZooKeeper伪分布式集群安装及使用
    Jersey实现跨服务器上传图片:UniformInterfaceException:403 Forbidden
    Spring中的一些面试题
  • 原文地址:https://www.cnblogs.com/shyroke/p/6850387.html
Copyright © 2020-2023  润新知