zoukankan      html  css  js  c++  java
  • (九)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();
            }
    
        }
    
    }

    所有代码在这里 :  链接

  • 相关阅读:
    Java WebService异构系统通信的原理及特点:SOAP与WSDL
    jenkins下拉框选择构建环境
    vue中的hash与history
    一行代码轻松搞定企微内嵌h5调用原生api不生效问题
    开源绘图工具plantUML入门教程(常用于画时序图等)
    什么是持续集成、持续交付、持续部署(CI/CD)?
    一篇文章了解CI/CD管道全流程
    开源免费的SSH工具推荐:electerm(推荐)、Finalshell
    Oracle数据库设置表空间自动扩展(解决因表空间不足引起的ORA01653: unable to extend table错误)
    测试工作中浏览器F12工具简单使用介绍
  • 原文地址:https://www.cnblogs.com/shyroke/p/6850387.html
Copyright © 2011-2022 走看看