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

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关联映射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css实现简单的告警提示动画效果

需求&#xff1a;css实现简单的告警提示动画效果&#xff0c;当接收到实时信息的时候&#xff0c;页面弹出告警信息的动画效果<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>css实现告警提示动画</…

博弈-sg函数的原理和优化(hdu-1536)

sg函数&#xff1a;sg函数是博弈中的确定一个position性质的一个函数&#xff0c;全称是sprague-grundy。性质1&#xff1a;对于所有的p-position&#xff0c;都有sg 0&#xff1b;对于所有的n-position都有sg &#xff01; 0&#xff1b; 性质2&#xff1a;某点a的sg函数的值…

java项目中Classpath路径到底指的是哪里?

1、src不是classpath, WEB-INF/classes,lib才是classpath&#xff0c;WEB-INF/ 是资源目录, 客户端不能直接访问。 2、WEB-INF/classes目录存放src目录java文件编译之后的class文件&#xff0c;xml、properties等资源配置文件&#xff0c;这是一个定位资源的入口。 3、引用clas…

程序员的八个级别

2009年4月6日 陈皓 在面试时&#xff0c;你可能会被经常问到“在未来5年&#xff0c;你想干什么&#xff1f;”&#xff0c;这可能是一个比较难回答的问题。在中国&#xff0c;答案一般可能会是Team leader&#xff0c;Manager&#xff0c;或是Architect&#xff0c;Specialist…

一个具有Spring Boot,Spring Security和Stormpath的简单Web应用程序-15分钟

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 更新 &#xff1a;我们最近发布了对…

Matlab各种分布的函数

正态分布&#xff1a;norm二项分布&#xff1a;bino卡方分布&#xff1a;chi2指数分布&#xff1a;exp柏松分布&#xff1a;poiss随机数&#xff1a;rnd密度函数&#xff1a;pdf累积概率&#xff1a;cdf逆累积分布&#xff1a;icdf&#xff0c;inv参数估计&#xff1a;fit对应组…

Python的配置文件模块yaml的使用

转自&#xff1a;君惜丶 简述 和GNU一样&#xff0c;YAML是一个递归着说“不”的名字。不同的是&#xff0c;GNU对UNIX说不&#xff0c;YAML说不的对象是XML。 YAML不是XML。 为什么不是XML呢&#xff1f;因为&#xff1a; YAML的可读性好。YAML和脚本语言的交互性好。YAML使用…

Matlab各种排序函数

sortsortrows 把整行的数据看作一个整体&#xff0c;对数据进行排序issorted, 判断是否已经排序了

位运算实例(一):判断奇偶性

同样一个问题&#xff0c;位运算可以提高程序的运行效率。 下面讲一下关于奇偶性的判断。 常规方法 public static boolean isOdd(int i){ return i % 2 ! 0; } 位运算方法 public static boolean isOdd(int i){ return (i & 1) ! 0; } 说明&#xff1a; 我们知道计算机中的…

Spring Security原理与应用

Spring Security是什么 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean&#xff08;注&#xff1a;包括认证与权限获取、配置、处理相关实例&#xff09;&#xff0c;充分利…

javafx2_JavaFX 2 GameTutorial第5部分

javafx2介绍 这是与JavaFX 2 Game Tutorial相关的六部分系列的第五部分。 我知道自从我写关于游戏的博客以来已经有很长时间了&#xff0c;但希望您仍然与我在一起。 如果您想回顾一下&#xff0c;请阅读第1部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4 部分 &#…

Matlab各种最值问题

最大最小maxmin求多个最小值,并返回其位置[B,ind] sort(A);B(1:n);前n个最小值ind(1:n);前n个最小值的位置

最长递增子序列问题的求解

最长递增子序列问题是一个很基本、较常见的小问题&#xff0c;但这个问题的求解方法却并不那么显而易见&#xff0c;需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想&#xff0c;能够锻炼设计较复杂算法的思维…

史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)

转载请标明出处&#xff1a; 原文首发于&#xff1a;https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f2-ribbon/ 本文出自方志朋的博客 在上一篇文章&#xff0c;讲了服务的注册和发现。在微服务架构中&#xff0c;业务都会被拆分成一个独立的服务&#xff0c;服务与服…

忽略已检查的异常,所有出色的开发人员都在这样做–基于600,000个Java项目

Github和Sourceforge上超过600,000个Java项目中的异常处理概述 Java是使用检查异常的少数语言之一。 它们在编译时强制执行&#xff0c;并且需要某种处理。 但是……实践中会发生什么&#xff1f; 大多数开发人员实际上处理任何事情吗&#xff1f; 以及他们如何做到的&#xf…

Matlab积分

yint(fx,x,a,b);%函数表达式&#xff0c;自变量&#xff0c;下限&#xff0c;上限注&#xff1a;求得到y为sym类型&#xff0c;不是数值&#xff0c;可以使用subs转换如&#xff1a;subs(y,1); subs(y,a,1);%第一个给y赋1&#xff0c;第二个给y中的a赋1

最长有序子序列—动态规划算法

动态规划使用范围&#xff1a;&#xff08;http://baike.baidu.com/view/28146.htm&#xff09; 任何思想方法都有一定的局限性&#xff0c;超出了特定条件&#xff0c;它就失去了作用。同样&#xff0c;动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效…

Codeforces 666E. Forensic Examination

Description 给出串 \(S\) ,和 \(m\) 个串 \(T_i\) ,每次询问 \((l,r,pl,pr)\) 表示 \(S[pl...pr]\) 在 \(T[l...r]\) 中哪一个出现次数最多,求出现次数和编号题面 Solution 基础题... 对于 \(S,T[l...r]\) 放在一起建广义后缀自动机 然后每次倍增到 S[pl,pr] ,然后查询子树内出…

Matlab控制精度

控制精度matlab控制运算精度用的是digits和vpa这两个函数digits用于规定运算精度&#xff0c;比如&#xff1a;digits(20);这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用&#xff0c;因为实际编程中&#xff0c;我们可能有些运算需要控制精度&#xff0c;…