Объединение @IdClass с @JoinColumn

#hibernate #jpa #spring-data-jpa

Вопрос:

Это мой пример родительского класса структуры сущностей

 @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 состоит из «идентификатора» и «месяца». Как мне указать «месяц» также в качестве составного ключа в моей сущности Foo. Также, каким будет мой класс FooPK?

Ответ №1:

Почему вы не можете просто отобразить атрибут в сущности? Вместо этого я бы использовал встроенные идентификаторы:

 @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;
}