首页 > 解决方案 > 将@IDClass 与@JoinColumn 结合使用

问题描述

这是我的示例实体结构 父类

@IDClass(TicketPK.class)
class Ticket {
@Id
int ticket_id;
@Id
Date month;
}

子实体

@IDClass(FooPK.class)
class Foo {
@Id
int id;

    @ManyToOne
    @JoinColumns({
            @JoinColumn(name = "Ticket_ID", referencedColumnName = "Ticket_id"),
            @JoinColumn(name = "month", referencedColumnName = "month") })
    private Ticket ticket;
}

Foo 的主键由 'id' 和 'month' 组成。如何在我的 Foo 实体中将“月”也指定为复合键。还有什么是我的 FooPK 课?

标签: hibernatejpaspring-data-jpa

解决方案


为什么不能只映射实体中的属性?我会改用嵌入式 ID:

@Entity
class Foo {
    @EmbeddedId
    FooId id;

    @ManyToOne
    @JoinColumns({
            @JoinColumn(name = "Ticket_ID", referencedColumnName = "Ticket_id"),
            @JoinColumn(name = "month", referencedColumnName = "month") })
    private Ticket ticket;
}

@Embeddable
class FooId {
    @Column(nullable = false)
    int id;
    @Column(nullable = false)
    int month;
}

推荐阅读