hibernate的@EmbeddedId嵌入式主键详解
一.前言
在我们的日常开发中,有时候会用到数据库进行设计的时候,采用了复合主键来来保证唯一性,下面介绍一下采用hibernate的@EmbeddedId嵌入式主键。
二.说明
设计一个学生类,包含了三个字段
- create tbale student(
- stu_no char(11) not null,
- stu_name varchar2(30) not null,
- stu_class varchar2(20)
- )
- stu_no : 学号、 stu_name : 姓名 、 stu_class : 班级
把stu_no、stu_name作为复合主键
三.studetn 学生类复合主键
- package com.shine.account.composite.holdportfolio.po;
- import java.io.Serializable;
- import javax.persistence.Column;
- import javax.persistence.Embeddable;
- /**
- * 类说明:studetn 学生类复合主键.
- *
- * NOTE : 符合条件:
- * 1.必须实现Serializable
- * 2.必须有默认的 public无参数的构造方法、必须覆盖 equals和 hashCode 方法,这些要求与使用复合主键的要求相同
- * 3.将嵌入式主键类使用 @Embeddable 标注,表示这个是一个嵌入式类。
- *
- */
- @Embeddable
- @SuppressWarnings("serial")
- public class StudentId implements Serializable{
- /**学号*/
- private String stuNo;
- /**姓名*/
- private String stuName;
- public StudentId() {
- super();
- }
- @Column(name = "STU_NO", nullable = false, precision = 11)
- public String getStuNo() {
- return stuNo;
- }
- public void setStuNo(String stuNo) {
- this.stuNo = stuNo;
- }
- @Column(name = "STU_NAME", nullable = false)
- public String getStuName() {
- return stuName;
- }
- public void setStuName(String stuName) {
- this.stuName = stuName;
- }
- @Override
- public boolean equals(Object other) {
- if(this == other)
- return true;
- if(other == null)
- return false;
- if(!(other instanceof StudentId))
- return false;
- StudentId otherStudentId = (StudentId) other;
- return this.getStuNo() == otherStudentId.stuNo &&
- this.getStuName() == otherStudentId.stuNo;
- }
- @Override
- public int hashCode() {
- return this.stuNo.hashCode() + this.stuName.hashCode();
- }
- }
四.po对象(采用java的注解的方式,来注解po)
- package com.shine.account.composite.holdportfolio.po;
- import java.io.Serializable;
- import javax.persistence.AttributeOverride;
- import javax.persistence.AttributeOverrides;
- import javax.persistence.Column;
- import javax.persistence.EmbeddedId;
- import javax.persistence.Entity;
- import javax.persistence.Table;
- /**
- * 类说明:学习实体类.
- */
- @Entity
- @Table(name = "STUDENT")
- @SuppressWarnings("serial")
- public class Student implements Serializable{
- /**复合主键类*/
- private StudentId studentId;
- /**学生对应班级*/
- private String stuClass;
- /**
- * @EmbeddedId 复合主键id
- * @AttributeOverrides 属性映射
- */
- @EmbeddedId
- @AttributeOverrides({
- @AttributeOverride(name = "stuNo", column = @Column(name = "STU_NO", nullable = false, precision = 11)),
- @AttributeOverride(name = "stuName", column = @Column(name = "STU_NAME", nullable = false))
- })
- public StudentId getStudentId() {
- return studentId;
- }
- public void setStudentId(StudentId studentId) {
- this.studentId = studentId;
- }
- @Column(name = "STU_CLASS", nullable = false)
- public String getStuClass() {
- return stuClass;
- }
- public void setStuClass(String stuClass) {
- this.stuClass = stuClass;
- }
- }
hibernate的@EmbeddedId嵌入式主键详解的更多相关文章
- mysql数据库外键、主键详解
一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学 ...
- Hibernate之:各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- hibernate集合映射inverse和cascade详解
hibernate集合映射inverse和cascade详解 1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或 ...
- Hibernate的几种主键生成策略
主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...
- Hibernate遇到oracle之主键生成策略
一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题:这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle ...
- java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询
持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...
- 嵌入式linux性能详解_转
最近简单看了下<嵌入式Linux性能详解>一书,对系统内存分布测试.程序运行.动态库等都很很好的解析. 作者史子旺,loughsky@sina.com. 有时间希望仔细通读,并验证.
- Hibernate——(3)主键生成方式
一.Hibernate中常用的主键生成方式有如下几种: 1)identity: 用于自动生成主键方式,除了 Oracle 不支持,其他数据库一般都支持(较常用) 2)sequence: Oracle ...
- (转) Hibernate持久化类与主键生成策略
http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...
随机推荐
- 获取APP最新版本的接口案例
思路: 开发初期.安卓的应用可能没有上传到应用市场,可以把应用apk放到服务器上,供用户下载.把对应用的版本信息整理成为一个XML文件,放到服务器上,通过接口读取xml文件,获取有版本信息,然后安卓端 ...
- 移动端框架篇-控制父容器的滑屏框架-slip.js
设计滑屏框架的办法一般有2种 控制父容器法 控制子容器法 这个算是控制父容器法 通过控制父容器的transform: translateY或margin-top或top的值来上下滑动页面,每次的位移的 ...
- 大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)
一,开篇分析 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用 ...
- JSP入门
JSP简介 所谓JSP就是在网页文件中嵌入Java代码或JSP定义的一些标记.JSP是建立在Servlet上的,在执行时JSP容器会先将JSP文件转换成Servlet文件以及class 文件,然后再执 ...
- JavaScript URL编码转换函数 encodeURIComponent()
encodeURIComponent()定义和用法 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 语法:encodeURIComponent(URIstring ...
- PHP正则表达式模式修饰符详解
PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误 ...
- 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装
操作系统:Mac OS X 10.11.5 1.下载书中的源代码:点击下载 2.切换到解压后的目录 unpv13e,先查看下 README,依次执行: ./configure cd lib make ...
- 1.1ASP.NET Web API 2入门
HTTP 不只是为了生成 web 页面.它也是建立公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围 ...
- js parseInt 显示0
parseInt 有第二个参数, 就是进制参数 parseInt("08", 10); //表示这个数字是十进制的就不会出错了.
- CentOS下SNMP的安装与使用
CentOS下SNMP的安装与使用 导读 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol).数据库模型(datab ...