【问题标题】:JPA Many to one mapping using composite key使用复合键的 JPA 多对一映射
【发布时间】:2021-12-01 17:03:25
【问题描述】:

我有两张桌子

PKG               TEAM
id(pk)            id
name              name
folder            filescount
                  pkg_id(fk)
                  (id,pkgid)(pk)

如何使用 jpa 团队表中的复合主键为上述创建一对多映射

【问题讨论】:

  • 已经检查过了,但似乎第二个表有 id 作为主键,但在我的表中,团队 pk 将是使用外键和 id 制作的复合主键
  • 为什么不在团队中使用 @ManyToOne @JoinColumn(name = "pkg_id") 而在 pkg 中使用 @OneToMany(mappedBy = "pkg")

标签: java sql hibernate jpa


【解决方案1】:

您可以通过像这样映射您的类来尝试“派生标识”:

@Entity
@Table(name = "PKG")
public class Package {
    @Id
    private Long id;

    private String name;

    private String folder;

    @OneToMany(mappedBy = "package")
    private List<Team> teams;

    ...
}

@Embeddable
public class TeamId {
    private Long id;

    @Column(name = "pkg_id")
    private Long pkgId; // corresponds to PK type of Package
}

@Entity
@Table(name = "TEAM")
public class Team { 
    @EmbeddedId
    private TeamId id;

    @ManyToOne
    @MapsId("pkgId") // m
    private Package package;

    private String name;

    private long filesCount;

    ...
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 2017-01-30
    • 2019-04-22
    • 2020-05-08
    相关资源
    最近更新 更多