如何使用 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 是 AdoptionAppointmentExam。这种关系为 Voucher 创建了以下关联实体:adoption_vouchersappointment_vouchersexam_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;

}