Гибернация много к одному с несколькими целями - PullRequest
0 голосов
/ 20 февраля 2020

У меня проблемы с отображением спящих отношений.

У меня есть универсальный c класс документов, который может иметь несколько подклассов. Я пытаюсь использовать наследование SINGLE_TABLE.

@Entity
@Table(schema = "cell", name = "document")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "document_type", discriminatorType = DiscriminatorType.STRING)
@Data
public abstract class Document extends Auditable<String> {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "document_seq")
    @SequenceGenerator(name = "document_seq", sequenceName = "document_sequence", allocationSize = 1)
    private Long documentId;
    @Column(length = 120)
    private String fileName;
    @Column(length = 300)
    private String path;
    private Long size;
}

Подкласс документа

@Entity
@DiscriminatorValue("QR")
public class QrDocument<T> extends Document {
    @Column
    private Long timeToLive;
    @ManyToOne
    @JoinColumns({@JoinColumn(name = "entity_id"), @JoinColumn(name = "entity_name")})
    @Target(Reservation.class) // What I need multiple target in here
    private T entity;
}

Затем мне нужны отношения один ко многим в других объектах.

Пример объекта 1:

@Entity
@Table(schema = "cell", name = "reservation")
@Data @EqualsAndHashCode(of = {"reservationId"})
public class Reservation extends Auditable<String> {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "reservation_seq")
    @SequenceGenerator(name = "reservation_seq", sequenceName = "reservation_sequence", allocationSize = 1)
    private Long reservationId;

    @OneToMany(mappedBy = "entity", fetch = FetchType.LAZY)
    private List<QrDocument<Reservation>> qrDocuments;
}

Пример сущности 2:

@Entity
@Table(schema = "cell", name = "reservation")
@Data @EqualsAndHashCode(of = {"reservationId"})
public class Room extends Auditable<String> {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "reservation_seq")
    @SequenceGenerator(name = "reservation_seq", sequenceName = "reservation_sequence", allocationSize = 1)
    private Long roomId;

    @OneToMany(mappedBy = "entity", fetch = FetchType.LAZY)
    private List<QrDocument<Reservation>> qrDocuments;
}

Мне нужно иметь несколько целей много к одному в классе QrDocument и иметь два столбца в таблице документа для идентификации сущностей OneToMany.

Некоторое время занимался этим и не мог найти правильного решения. Способ, которым я подхожу к этому, может быть неправильным, но я не хочу нескольких таблиц или одной таблицы с несколькими столбцами внешнего ключа. Я хочу, чтобы entity_id и entity_name для моей таблицы документов generi c

. Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...