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();
        }
  • 相关阅读:
    Delphi中的钩子函数HOOK详解
    Delphi好书推荐
    Windows通知栏图标高级编程概述
    关于开机自动运行程序和自动启动服务
    如何在一个窗体中嵌入另一个窗体
    三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子
    Delphi中的钩子函数HOOK详解
    STL(转)
    默认参数(c++)
    STL2
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5234308.html
Copyright © 2011-2022 走看看