У меня есть следующие классы/сопоставления в моей модели:
@Entity
public class UpSaleReason {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private Subject subject;
@ElementCollection
private Set<Reason> relatesToRegisteredReasons;
}
@Embeddable
public class Reason {
@ManyToOne
private Subject subject;
@Enumerated(value = EnumType.STRING)
private Category category;
}
@Entity
public class Subject {
@Id
private Long id;
private String name;
}
@Entity
public class ConversationCase {
@Id
private Long id;
@Embedded
private Reason reason;
}
и пытаюсь выполнить этот HQL:
select r from UpSaleReason as r, ConversationCase as cc
where cc.reason in elements(relatedReasons) and cc.id = :id
что дает мне:
... Вызвано: java.sql.SQLException: выбор одного столбца требуется в предикате IN в выражении [выберите upsalereas0_.id как id8_, upsalereas0_.subject_id как subject2_8_ из UpSaleReason upsalereas0_ перекрестное соединение ConversationCase conversati1_ где (conversati1_.subject_id в (выберите relatedstor2_ .category, referstor2_.subject_id из up_sale_to_registered_reasons, relatedstor2_ где upsalereas0_.id=relatestor2_.UpSaleReason_id)) и conversati1_.id=?]
Что мне делать, чтобы связать два объекта в HQL, которые относятся друг к другу через отношение, которое можно описать как «значение свойства компонента одного объекта должно содержаться в ElementCollection другого»?