`

嵌入式主键@EmbeddedId

    博客分类:
  • JPA
 
阅读更多
用于定义复合主键

方法1:

(1)编写一个嵌入式主键的类testPK

作为嵌入式主键类,要满足以下几点要求。

1.必须实现Serializable接口、必须有默认的public无参数的构造方法、必须覆盖equals 和hashCode方法,这些要求与使用复合主键的要求相同。

2.将嵌入式主键类使用@Embeddable标注,表示这个是一个嵌入式类。

@Embeddable
public class TestPK {
  private String firstName;

  private String lastName;

  public TestPK() {
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  @Override
  public boolean equals(Object o) {
     testPK other = (testPK) obj;
     EqualsBuilder builder = new EqualsBuilder();
     builder.append(firstName,       other.firstName).append(lastName,other.lastName);
     boolean equals = builder.isEquals();
     return equals;
  }

  @Override
  public int hashCode() {
    HashCodeBuilder builder = new HashCodeBuilder();
    builder.append(firstName).append(lastName);
    int code = builder.hashCode();
    return code;
  }
}

(2)通过@EmbeddedId注释标注实体中的嵌入式主键

注意:
1.必须要实现serializable接口

2.需要有无参的构造函数

3.@Embeddable注释,表示此类可以被插入某个entity中

4.两个class和Column的列名都必需与表里的列名一致,建立sql时,会自动选择TestPK里的列名

@Entity
@Table(name = "schemaname.tablename")
public class Test {
  @EmbeddedId
  private TestPK id;

  private String name;

  public Test() {
  }

  public int getId() {
    return id.getId();
  }

  @Column(name = "firstname")
  public String getFirstName(){
    return id.getFirstName()
  }

  @Column(name = "lastname")
  public String getLastName(){
    return id.getLastName()
  }

  @Column(name = "name")
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

方法2:

(3)不想在TestPK中定义列名,可以用以下方法,用于公共复合主键
通过@AttributeOverride注释来指定Test类的firstName,lastName与数据库中表的first_name,last_name进行映射.
以下代码在class Test
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name = firstName, column = @Column(name = first_name)),
@AttributeOverride(name = lastName, column = @Column(name = last_name)) })

不需要getFirstName,getLastName
分享到:
评论

相关推荐

    Hibernate注解映射联合主键

    该类需要实现java.io.Serializable接口并重写equals和hascode,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类的一个引用,并生成set和get方法,并将该引用注解为@EmbeddedId 第三、将联合主键的字段...

    JPA 标注 JPA标签手册

    o @EmbeddedId o @Entity o @EntityListeners o @EntityResult o @Enumerated o @ExcludeDefaultListeners o @ExcludeSuperclassListeners • F o @FieldResult • G o @GeneratedValue • I o @Id o @IdClass o @...

    Hibernate注释大全收藏

    以上所有实体使用 JOINED 策略 Ferry和Boat class使用同名的主键关联(eg: Boat.id = Ferry.id), AmericaCupClass 和 Boat 关联的条件为 Boat.id = AmericaCupClass.BOAT_ID. 从父类继承的属性 @MappedSuperclass ...

    javax.persistence.jar

    javax.persistence.EmbeddedId.class javax.persistence.Entity.class javax.persistence.EntityExistsException.class javax.persistence.EntityListeners.class javax.persistence.EntityManager.class javax....

    QT5开发及实例配套源代码.zip

    QT5开发及实例配套[源代码],Qt是诺基亚公司的C++可视化开发平台,本书以Qt 5作为平台,每个章节在简单介绍开发环境的基础上,用一个小实例,介绍Qt 5应用程序开发各个方面,然后系统介绍Qt 5应用程序的开发技术,一般均通过实例介绍和讲解内容。最后通过三个大实例,系统介绍Qt 5综合应用开发。光盘中包含本书教学课件和书中所有实例源代码及其相关文件。通过学习本书,结合实例上机练习,一般能够在比较短的时间内掌握Qt 5应用技术。本书既可作为Qt 5的学习和参考用书,也可作为大学教材或Qt 5培训用书。

    grpcio-1.46.3-cp37-cp37m-musllinux_1_1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    大学生毕业答辨ppt免费模板【不要积分】下载可编辑可用(138).zip

    大学生毕业答辨ppt免费模板【不要积分】下载可编辑可用(138).zip

    Eclipse的C/C++自动补全插件org.eclipse.cdt.ui-7.3.100.202111091601

    Eclipse的C/C++自动补全插件,制作参考:https://blog.csdn.net/kingfox/article/details/104121203?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-104121203-blog-117118786.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-1-104121203-blog-117118786.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=2

    大学生毕业答辨ppt免费模板【不要积分】下载可编辑可用(137).zip

    大学生毕业答辨ppt免费模板【不要积分】下载可编辑可用(137).zip

    VB网络多人聊天系统的设计与实现(论文+源代码).rar

    计算机专业毕业时间之VB精品论文源代码资源

    机械设计-壳体冲压工艺及模具设计【全套16张CAD图】+毕设说明书文档.zip

    机械设计-壳体冲压工艺及模具设计【全套16张CAD图】+毕设说明书文档.zip

    源代码-e路小说爬虫 v1.5.1028.zip

    源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip 源代码-e路小说爬虫 v1.5.1028.zip

    VB中大迅通合同统计系统(论文+源代码).rar

    计算机专业毕业设计VB精品论文资源

    VB用VB开发交互式CAD系统(源代码+系统+答辩PPT).rar

    计算机专业毕业设计VB精品论文资源

    22计应专3王国长22206510201318.zip

    22计应专3王国长22206510201318.zip

    debugpy-1.6.4-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    VB医药管理系统设计(源代码+论文).rar

    计算机专业毕业设计VB精品论文资源

    基于nodeJs的mysql数据库设计程序

    godoDb数据库设计器,是一款mysql数据库管理工具。 支持数据库备份还原,支持添加数据库; 支持自动生成数据库设计文档,md 格式以及实时预览,可以下载成 pdf/word文件; 支持数据表名/注释/autoid 的更改,支持优化表/修复表/删除表/清空表; 可查看/编辑/新增/复制任意表数据; 可执行sql文件,并查看执行后的数据结果; 可更改字段名/注释/默认值/排序,可拖拽排序字段,可删除字段; 支持连接/管理多个外部数据库,可通过ssh连接外部数据库,可导入pem文件连接; 支持数据库表保护; 精细化的权限控制,多角色多用户管理; 可查询每个用户的操作记录,方便回查;

    debugpy-1.0.0b8-cp35-cp35m-manylinux1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    sja1301.x86_64.tar.gz

    SQLyong 各个版本,免费下载 SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。

Global site tag (gtag.js) - Google Analytics