hibernate笔记--组合主键映射方法

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

  一个数据库表中其主键有可能不止一个属性,同样映射到实体类中,可能有两个或多个属性共同配置成为一个主键,假设一个实体类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();
    }

 

相关文章
|
11月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
139 0
|
1月前
|
Java 数据库连接 数据库
Hibernate5中实体映射命名策略
Hibernate5中实体映射命名策略
62 0
|
1月前
|
SQL 存储 Java
Hibernate - 继承关联关系映射
Hibernate - 继承关联关系映射
46 0
|
9月前
|
Java 数据库连接
Hibernate中的主键生成方法native与assigned
Hibernate中的主键生成方法native与assigned
48 0
|
Java 数据库连接
mybatis-plus和hibernate 忽略映射字段
mybatis-plus和hibernate 忽略映射字段
254 1
|
Java 关系型数据库 数据库连接
《Hibernate上课笔记》---class1---Hibernate简介
《Hibernate上课笔记》---class1---Hibernate简介
58 0
《Hibernate上课笔记》---class1---Hibernate简介
|
Java 数据库连接 数据库
《Hibernate上课笔记》----class2----Hibernate的增删改查操作
《Hibernate上课笔记》----class2----Hibernate的增删改查操作
84 0
|
SQL Java 数据库连接
《Hibernate上课笔记》-----class3----Hibernate的单实体映射
《Hibernate上课笔记》-----class3----Hibernate的单实体映射
101 0
|
1月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
1月前
|
SQL 缓存 Java
Java一分钟之-Hibernate:ORM框架实践
【5月更文挑战第15天】Hibernate是Java的ORM框架,简化数据库操作。本文列举并解决了一些常见问题: 1. 配置SessionFactory,检查数据库连接和JDBC驱动。 2. 实体类需标记主键,属性映射应匹配数据库列。 3. 使用事务管理Session,记得关闭。 4. CRUD操作时注意对象状态和查询结果转换。 5. 使用正确HQL语法,防止SQL注入。 6. 根据需求配置缓存。 7. 懒加载需在事务内处理,避免`LazyInitializationException`。理解和避免这些问题能提升开发效率。
41 0