如何使用 HQL SELECT 由较弱实体的 id SELECT 作为@MappedSuperclass 的更强实体?
How to SELECT the stronger entity which is a @MappedSuperclass by the weaker entity's id using HQL?
我有以下映射的 superclass,它作为其他 3 classes:
的 superclass
@MappedSuperclass
public abstract class Donation {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
//other irrelevant attributes
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY)
private List<Voucher> vouchers;
//getters and setters
}
从 Donation
延伸出来的其他 class 是 Adoption
、Appointment
和 Exam
。这种关系为 Voucher
创建了以下关联实体:adoption_vouchers
、appointment_vouchers
和 exam_vouchers
。
当前的问题是现在我必须列出所有 Voucher
及其 Donation
实体。 由于我没有在凭证中指定捐赠关系class(因为它可以代表提到的3个class中的任何一个,我无法联系到 @MappedSuperclass
),有没有办法使用 HQL 实现它(检索类似 Map<Donation, Voucher>
的内容),或者可能对我的结构进行微小更改以检索此信息?
HQL 使用以下模型可能看起来像这样
SELECT a.vouchers FROM Adoption a;
public enum DonationType {
ADOPTION, APPOINTMENT, EXAM;
}
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",
discriminatorType = DiscriminatorType.STRING)
public abstract class Donation {
@Enumerated(EnumType.STRING)
private DonationType type;
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY)
private List<Voucher> vouchers;
}
@Entity
@DiscriminatorValue(DonationType.ADOPTION)
public class Adoption extends Donation {
}
@Entity
@DiscriminatorValue(DonationType.Exam)
public class Exam extends Donation {
}
@Entity
@DiscriminatorValue(DonationType.APPOINTMENT)
public class Appointment extends Donation {
}
@Entity
public class Voucher {
//could be single mapping just to supperclass, depends on logic what do you need
@ManyToOne
private Adoption adoption;
@ManyToOne
private Exam exam;
@ManyToOne
private Appointment exam;
}
我有以下映射的 superclass,它作为其他 3 classes:
的 superclass@MappedSuperclass
public abstract class Donation {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
//other irrelevant attributes
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY)
private List<Voucher> vouchers;
//getters and setters
}
从 Donation
延伸出来的其他 class 是 Adoption
、Appointment
和 Exam
。这种关系为 Voucher
创建了以下关联实体:adoption_vouchers
、appointment_vouchers
和 exam_vouchers
。
当前的问题是现在我必须列出所有 Voucher
及其 Donation
实体。 由于我没有在凭证中指定捐赠关系class(因为它可以代表提到的3个class中的任何一个,我无法联系到 @MappedSuperclass
),有没有办法使用 HQL 实现它(检索类似 Map<Donation, Voucher>
的内容),或者可能对我的结构进行微小更改以检索此信息?
HQL 使用以下模型可能看起来像这样
SELECT a.vouchers FROM Adoption a;
public enum DonationType {
ADOPTION, APPOINTMENT, EXAM;
}
@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",
discriminatorType = DiscriminatorType.STRING)
public abstract class Donation {
@Enumerated(EnumType.STRING)
private DonationType type;
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY)
private List<Voucher> vouchers;
}
@Entity
@DiscriminatorValue(DonationType.ADOPTION)
public class Adoption extends Donation {
}
@Entity
@DiscriminatorValue(DonationType.Exam)
public class Exam extends Donation {
}
@Entity
@DiscriminatorValue(DonationType.APPOINTMENT)
public class Appointment extends Donation {
}
@Entity
public class Voucher {
//could be single mapping just to supperclass, depends on logic what do you need
@ManyToOne
private Adoption adoption;
@ManyToOne
private Exam exam;
@ManyToOne
private Appointment exam;
}