一.前言

在我们的日常开发中,有时候会用到数据库进行设计的时候,采用了复合主键来来保证唯一性,下面介绍一下采用hibernate的@EmbeddedId嵌入式主键。

二.说明

设计一个学生类,包含了三个字段

  1. create tbale student(
  2. stu_no char(11) not null,
  3. stu_name varchar2(30) not null,
  4. stu_class varchar2(20)
  5. )
  6.  
  7. stu_no : 学号、 stu_name : 姓名 stu_class : 班级
    stu_nostu_name作为复合主键

三.studetn 学生类复合主键

  1. package com.shine.account.composite.holdportfolio.po;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import javax.persistence.Column;
  6. import javax.persistence.Embeddable;
  7.  
  8. /**
  9. * 类说明:studetn 学生类复合主键.
  10. *
  11. * NOTE : 符合条件:
  12. * 1.必须实现Serializable
  13. * 2.必须有默认的 public无参数的构造方法、必须覆盖 equals和 hashCode 方法,这些要求与使用复合主键的要求相同
  14. * 3.将嵌入式主键类使用 @Embeddable 标注,表示这个是一个嵌入式类。
  15. *
  16. */
  17. @Embeddable
  18. @SuppressWarnings("serial")
  19. public class StudentId implements Serializable{
  20.  
  21. /**学号*/
  22. private String stuNo;
  23.  
  24. /**姓名*/
  25. private String stuName;
  26.  
  27. public StudentId() {
  28. super();
  29. }
  30.  
  31. @Column(name = "STU_NO", nullable = false, precision = 11)
  32. public String getStuNo() {
  33. return stuNo;
  34. }
  35.  
  36. public void setStuNo(String stuNo) {
  37. this.stuNo = stuNo;
  38. }
  39.  
  40. @Column(name = "STU_NAME", nullable = false)
  41. public String getStuName() {
  42. return stuName;
  43. }
  44.  
  45. public void setStuName(String stuName) {
  46. this.stuName = stuName;
  47. }
  48.  
  49. @Override
  50. public boolean equals(Object other) {
  51. if(this == other)
  52. return true;
  53. if(other == null)
  54. return false;
  55. if(!(other instanceof StudentId))
  56. return false;
  57.  
  58. StudentId otherStudentId = (StudentId) other;
  59.  
  60. return this.getStuNo() == otherStudentId.stuNo &&
  61. this.getStuName() == otherStudentId.stuNo;
  62. }
  63.  
  64. @Override
  65. public int hashCode() {
  66. return this.stuNo.hashCode() + this.stuName.hashCode();
  67. }
  68. }

四.po对象(采用java的注解的方式,来注解po)

  1. package com.shine.account.composite.holdportfolio.po;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import javax.persistence.AttributeOverride;
  6. import javax.persistence.AttributeOverrides;
  7. import javax.persistence.Column;
  8. import javax.persistence.EmbeddedId;
  9. import javax.persistence.Entity;
  10. import javax.persistence.Table;
  11.  
  12. /**
  13. * 类说明:学习实体类.
  14. */
  15. @Entity
  16. @Table(name = "STUDENT")
  17. @SuppressWarnings("serial")
  18. public class Student implements Serializable{
  19.  
  20. /**复合主键类*/
  21. private StudentId studentId;
  22.  
  23. /**学生对应班级*/
  24. private String stuClass;
  25.  
  26. /**
  27. * @EmbeddedId 复合主键id
  28. * @AttributeOverrides 属性映射
  29. */
  30. @EmbeddedId
  31. @AttributeOverrides({
  32. @AttributeOverride(name = "stuNo", column = @Column(name = "STU_NO", nullable = false, precision = 11)),
  33. @AttributeOverride(name = "stuName", column = @Column(name = "STU_NAME", nullable = false))
  34. })
  35. public StudentId getStudentId() {
  36. return studentId;
  37. }
  38.  
  39. public void setStudentId(StudentId studentId) {
  40. this.studentId = studentId;
  41. }
  42.  
  43. @Column(name = "STU_CLASS", nullable = false)
  44. public String getStuClass() {
  45. return stuClass;
  46. }
  47.  
  48. public void setStuClass(String stuClass) {
  49. this.stuClass = stuClass;
  50. }
  51. }   

hibernate的@EmbeddedId嵌入式主键详解的更多相关文章

  1. mysql数据库外键、主键详解

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如  学生表(学号,姓名,性别,班级) 其中每个学生的学 ...

  2. Hibernate之:各种主键生成策略与配置详解

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  3. hibernate集合映射inverse和cascade详解

    hibernate集合映射inverse和cascade详解   1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或 ...

  4. Hibernate的几种主键生成策略

    主键类型: 业务主键(natural key):业务主键的值是来源于一个业务数据. 代理主键(surrogate key):代理主键需要采用一种方式来生成某个唯一值. 代理主键的生成策略: 1.hib ...

  5. Hibernate遇到oracle之主键生成策略

    一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题:这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle ...

  6. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  7. 嵌入式linux性能详解_转

    最近简单看了下<嵌入式Linux性能详解>一书,对系统内存分布测试.程序运行.动态库等都很很好的解析. 作者史子旺,loughsky@sina.com. 有时间希望仔细通读,并验证.

  8. Hibernate——(3)主键生成方式

    一.Hibernate中常用的主键生成方式有如下几种: 1)identity: 用于自动生成主键方式,除了 Oracle 不支持,其他数据库一般都支持(较常用) 2)sequence: Oracle ...

  9. (转) Hibernate持久化类与主键生成策略

    http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英 ...

随机推荐

  1. 获取APP最新版本的接口案例

    思路: 开发初期.安卓的应用可能没有上传到应用市场,可以把应用apk放到服务器上,供用户下载.把对应用的版本信息整理成为一个XML文件,放到服务器上,通过接口读取xml文件,获取有版本信息,然后安卓端 ...

  2. 移动端框架篇-控制父容器的滑屏框架-slip.js

    设计滑屏框架的办法一般有2种 控制父容器法 控制子容器法 这个算是控制父容器法 通过控制父容器的transform: translateY或margin-top或top的值来上下滑动页面,每次的位移的 ...

  3. 大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)

    一,开篇分析 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用 ...

  4. JSP入门

    JSP简介 所谓JSP就是在网页文件中嵌入Java代码或JSP定义的一些标记.JSP是建立在Servlet上的,在执行时JSP容器会先将JSP文件转换成Servlet文件以及class 文件,然后再执 ...

  5. JavaScript URL编码转换函数 encodeURIComponent()

    encodeURIComponent()定义和用法 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 语法:encodeURIComponent(URIstring ...

  6. PHP正则表达式模式修饰符详解

    PHP模式修饰符又叫模式修正符,是在正则表达式的定界符之外使用.主要用来调整正则表达式的解释,提扩展了正则表达式在匹配.替换等操作的某些功能,增强了正则的能力.但是有很多地方的解释都是错误的,也容易误 ...

  7. 《UNIX网络编程(第3版)》unp.h等源码文件的编译安装

    操作系统:Mac OS X 10.11.5 1.下载书中的源代码:点击下载 2.切换到解压后的目录 unpv13e,先查看下 README,依次执行: ./configure cd lib make ...

  8. 1.1ASP.NET Web API 2入门

    HTTP 不只是为了生成 web 页面.它也是建立公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围 ...

  9. js parseInt 显示0

    parseInt 有第二个参数, 就是进制参数 parseInt("08", 10);  //表示这个数字是十进制的就不会出错了.

  10. CentOS下SNMP的安装与使用

    CentOS下SNMP的安装与使用   导读 简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol).数据库模型(datab ...