我在映射休眠关系时遇到麻烦。
我有通用的文档类,其中可能有多个子类。我正在尝试使用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。
任何帮助将不胜感激。