多目标休眠多对一

时间:2020-02-20 17:54:17

标签: java hibernate orm

我在映射休眠关系时遇到麻烦。

我有通用的文​​档类,其中可能有多个子类。我正在尝试使用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。

任何帮助将不胜感激。

0 个答案:

没有答案