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

    所有代码在这里 :  链接

  • 相关阅读:
    HDOJ1556 Color the ball
    BUPT( 北邮)2 大数 AB
    DateTime.ToString()的用法
    判断DataTable中的空值(字段为数值型)?
    [转].NET平台下的Excel编程|C#操作Excel|Application和ApplicationClass的联系和区别
    [转]寻找SqlHelper
    C#认识/理解/运用 StreamReader,StreamWriter,StringReader,StringWriter[转]
    C# 应用微软的Visual Studio International Pack 类库提取汉字拼音首字母[转]
    [转]想靠写程序赚更多钱,写到两眼通红,写得比别人都又快又好好几倍,结果又能如何?
    DataRow复制一行到另一个DataTable[转]
  • 原文地址:https://www.cnblogs.com/shyroke/p/6850387.html
Copyright © 2011-2022 走看看