hibernate关联映射

最近,我们面临着带有复合id字段的Hibernate关联映射的棘手情况。 我们需要与一对一和多对一进行双向关联。我们的拖曳表是“ REPORT”和“ REPORT_SUMMARY”,它们之间具有从REPORT到REPORT_SUMMARY的一对多关系,而从REPORT_SUMMARY到REPORT表。 REPORT_SUMMARY表的主键定义为复合主键,它由自动增量id字段和REPORT表的主键组成。
CREATE TABLE REPORT (ID INT(10) NOT NULL AUTO_INCREMENT,NAME VARCHAR(45) NOT NULL,PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE REPORT_SUMMARY (ID INT(10) NOT NULL AUTO_INCREMENT,NAME VARCHAR(45) NOT NULL,RPT_ID INT(10) NOT NULL,PRIMARY KEY (`ID`,`RPT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Hibernate实体类是休假的。
Report.java

package com.semika.autoac.entities;import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Report implements Serializable{private static final long serialVersionUID = 9146156921169669644L;private Integer id;private String name;private Set<ReportSummary> reportSummaryList  = new HashSet<ReportSummary>();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<ReportSummary> getReportSummaryList() {return reportSummaryList;}public void setReportSummaryList(Set<ReportSummary> reportSummaryList) {this.reportSummaryList = reportSummaryList;}
}

ReportSummary.java

package com.semika.autoac.entities;import java.io.Serializable;
public class ReportSummary implements Serializable {private static final long serialVersionUID = 8052962961003467437L;private ReportSummaryId id;
private String name;public ReportSummaryId getId() {return id;
}
public void setId(ReportSummaryId id) {this.id = id;
}
public String getName() {return name;
}
public void setName(String name) {this.name = name;
}
@Override
public int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((name == null) ? 0 : name.hashCode());return result;
}
@Override
public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;ReportSummary other = (ReportSummary) obj;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}
}

ReportSummaryId.java

package com.semika.autoac.entities;import java.io.Serializable;public class ReportSummaryId implements Serializable{private static final long serialVersionUID = 6911616314813390449L;private Integer id;
private Report report;public Integer getId() {return id;
}
public void setId(Integer id) {this.id = id;
}
public Report getReport() {return report;
}
public void setReport(Report report) {this.report = report;
}
@Override
public int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((report == null) ? 0 : report.hashCode());return result;
}
@Override
public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;ReportSummaryId other = (ReportSummaryId) obj;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;if (report == null) {if (other.report != null)return false;} else if (!report.equals(other.report))return false;return true;}
}

报表对象具有ReportSummary对象的集合,ReportSummaryId具有对Report对象的引用。 此实现的最重要部分是Hibernate映射文件。 Report.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping><class name="com.semika.autoac.entities.Report" table="REPORT" ><id name="id" type="int" column="id" ><generator class="native"/></id><property name="name"><column name="NAME" /></property><set name="reportSummaryList" table="REPORT_SUMMARY" cascade="all" inverse="true"><key column="RPT_ID" not-null="true"></key><one-to-many class="com.semika.autoac.entities.ReportSummary"/></set></class>
</hibernate-mapping>

ReportSummary.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.semika.autoac.entities.ReportSummary" table="REPORT_SUMMARY" ><composite-id name="id" class="com.semika.autoac.entities.ReportSummaryId"><key-property name="id" column="ID"></key-property><key-many-to-one name="report" class="com.semika.autoac.entities.Report"column="RPT_ID"</key-many-to-one></composite-id><property name="name"><column name="NAME" /></property></class>
</hibernate-mapping>

参考: 如何在我们的JCG合作伙伴 Semika loku kaluge的Code Box博客上将Hibernate用于复合ID以及关联映射 。

翻译自: https://www.javacodegeeks.com/2012/08/hibernate-composite-ids-with.html

hibernate关联映射

hibernate关联映射_具有关联映射的Hibernate Composite ID相关推荐

  1. xbox手柄映射_如何重新映射您的Xbox One控制器的按钮

    xbox手柄映射 Microsoft's Xbox One allows you to remap the buttons on its controller. This feature was or ...

  2. servlet多重映射_关于多重映射问题,很奇怪

    发表时间:2004-03-29 我说说我的情况吧! 我的表是多对多关联! schema如下 drop table if exists course_employee_link drop table i ...

  3. 使用枚举映射_用EnumMaps映射枚举键

    使用枚举映射 这是一种在JDK中存在很长时间的类型,当我们要定义以枚举类型作为键的映射时,这种类型会派上用场: EnumMap是一种特殊的Map . 我们将为给定的枚举创建一个映射: public e ...

  4. xml对象映射_将对象映射到多个XML模式–天气示例

    xml对象映射 我已经在EclipseLink JAXB(MOXy)的@XmlPath和外部绑定文件扩展中撰写了以前的文章. 在本文中,我将通过将单个对象模型映射到两个不同的XML模式来演示这些扩展的 ...

  5. 灰色关联分析_灰色关联分析模型研究综述

    灰色关联分析模型研究小结 1 引言 灰色关联分析是灰色系统理论中十分活跃的一个分支, 其基本思想是根据序列曲线几何形状来判断不同序列之间的联系是否紧密. 基本思路是通过线性插值的方法将系统因素的离散行 ...

  6. mybatis02映射动态sql关联查询spring整合mybatis

    2019独角兽企业重金招聘Python工程师标准>>> 输入映射和输出映射: 动态sql: 关联查询_一对一: 关联查询_一对多: 一对一,一对多操作的区别: 一对一,resultM ...

  7. 【SSH系列】Hibernate映射 -- 一对多关联映射

         映射原理        一对多关联映射和多对一关联映射的映射原理是一样一样的,所以说嘛,知识都是相通的,一通百通,为什么说一对多关联映射和多对一关联映射是一样的呢?因为她们都是在多的一端加入 ...

  8. hibernate的一对多双向关联映射----客户和订单关系

    客户和订单关系:客户是一的一方,订单是多的一方. customer表: CREATE TABLE `customer` ( `ID` int(4) NOT NULL AUTO_INCREMENT , ...

  9. 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

    [SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...

最新文章

  1. xdg-open 打开“irc:*”链接
  2. Golang协程案例:并行计算指定数的阶乘(未使用管道)
  3. Greenplum【环境搭建 02】GP 数据库 web 监控工具 Greenplum Command Center v6.6.0 安装配置及问题处理(一篇学会部署配置启动 GPCC 避坑指南)
  4. JAVA中System.out.println和System.out.print有什么区别
  5. 【译】《Understanding ECMAScript6》- 第三章-Object
  6. 喜欢独自喝茶的人是什么样的人
  7. jqGrid获取数据库数据的方式
  8. anaconda pycharm_使用Pycharm在anaconda环境下安装pygame库
  9. Java开发框架——Struts框架
  10. 华为hs8145v5如何改桥接_口译vlog | 跟我一起去华为东莞“欧洲小镇”吧!
  11. Windows 10系统中修改用户名的方法
  12. PushMall推贴共享电商十二月更新计划
  13. matlab中sum对矩阵求和以及size用法
  14. 大数据可视化常用图表--简单说
  15. Spring Boot配置(一)
  16. 再劫面包店(村上春树)
  17. 生信-单细胞数据处理
  18. 从网页复制图片到word不显示的解决办法
  19. SwitchyOmega
  20. 用户体验要素:以用户为中心的产品设计

热门文章

  1. Java编程:Java的反射机制中的 getComponentType() 方法
  2. 推荐一个实用的 .gitignore 文件
  3. Java最小堆解决TopK问题
  4. tar (child): .tgz\r:无法 open: 没有那个文件或目录
  5. 车提示检测轮胎气压_水淹车估价中心_辽宁中车检
  6. Java8 Lambda总结
  7. apache kafka_Apache Kafka消费者再平衡
  8. java设计模式代理模式_Java中的代理设计模式
  9. java监控数据库性能_Java:GraalVM数据库流性能
  10. 算法正义_正义联盟的Sprint Boot