首页 > 解决方案 > 如何在hibernate中使用作为另一个表的复合主键的部分外键作为主键?

问题描述

我有 2 个表。表 A 包含复合主键。我将此键用作另一个表中的外键。但是在这个表中我需要一个复合主键,其中一列我需要从 A 表的复合键中获取它。我无法使用 mapsId 实现这一点,因为它占用了整个 CK。有没有办法实现它?

我只需要像下面这样的休眠方式:

我在休眠中需要完全一样

标签: javaoraclehibernatejpaorm

解决方案


以下是您如何映射与您链接到的 SO 问题中的数据库表相对应的实体:

@Entity
public class Concert {
  @Id
  Integer id;

  String name;

  ...
}


@Embeddable
public class ConcertDetailsId {
  Date date;

  Integer concertId; // corresponds to PK type of Concert
}


@Entity
public class ConcertDetails {
  @EmbeddedId
  ConcertDetailsId id;

  @MapsId("concertId") // maps concertId attribute of embedded id
  @ManyToOne
  Concert concert;

  BigDecimal cost;

  ...
}

这是您尝试使用的方式@MapsId吗?如果是这样,问题是什么?

JPA 2.2 规范的第 2.4.1 节讨论了派生的身份(带有示例) 。


推荐阅读