zoukankan      html  css  js  c++  java
  • hibernate笔记--组合主键映射方法

      一个数据库表中其主键有可能不止一个属性,同样映射到实体类中,可能有两个或多个属性共同配置成为一个主键,假设一个实体类Score,其主键有两个属性stuId(学生编号)和subjectId(科目编号),在hibernate环境下应该这样配置:

    新建一个实体类ScoreId,属性为stuId,和subjectId,该类需要实现serializable接口(最好重写equals方法和hashcode方法):

    public class ScoreId implements Serializable {
    
        private int stuId;
        private int subjectId;
        public int getStuId() {
            return stuId;
        }
        public void setStuId(int stuId) {
            this.stuId = stuId;
        }
        public int getSubjectId() {
            return subjectId;
        }
        public void setSubjectId(int subjectId) {
            this.subjectId = subjectId;
        }
        public ScoreId(int stuId, int subjectId) {
            super();
            this.stuId = stuId;
            this.subjectId = subjectId;
        }
        
    }

    新建实体类Score:

    public class Score {
        private ScoreId scoreId;
        private double result;
        public ScoreId getScoreId() {
            return scoreId;
        }
        public void setScoreId(ScoreId scoreId) {
            this.scoreId = scoreId;
        }
        public double getResult() {
            return result;
        }
        public void setResult(double result) {
            this.result = result;
        }
        public Score(ScoreId scoreId, double result) {
            super();
            this.scoreId = scoreId;
            this.result = result;
        }
            
    }

    其次是Score.hbm.xml配置文件:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping package="com.wang.pojo">
        <class name="Score" >
        <composite-id name="scoreId" class="ScoreId">
            <key-property name="stuId"></key-property>
            <key-property name="subjectId"></key-property>
        </composite-id>
        
        <property name="result"></property>
        </class>
    </hibernate-mapping>

    hibernate.cfg.xml这里就省略了,现在新建一个测试类,用于生成数据库表以及向数据库中存放一条数据:

    @Test
        public void testCreateDB(){
            Configuration cfg = new Configuration().configure();
            SchemaExport se=new SchemaExport(cfg);
            //第一个参数是否生成ddl脚本 第二个参数是否执行到数据库
            se.create(true,true);
        }
        @Test
        public void testSave(){
            Session session = HibernateUtil.getSession();
            Transaction tx = session.beginTransaction();
            Score s=new Score(new ScoreId(2,5),88);
            session.save(s);
            tx.commit();
            session.close();
        }
  • 相关阅读:
    阿里云 MaxCompute 2019-12 月刊
    【原】react+redux实战
    【原】http缓存与cdn相关技术
    【原】redux异步操作学习笔记
    【原】javascript最佳实践
    【原】react做tab切换的几种方式
    【原】web移动端常用知识点笔记
    【原】移动端界面的适配
    【原】js检测移动端横竖屏
    【原】javascript数组操作
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5234308.html
Copyright © 2011-2022 走看看