Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Невозможно построить запрос HQL, который связывает сущности, связанные через "содержащиеся в отношении коллекции элементов"

Автор вопроса: Den OrlovОтветов: 1

У меня есть следующие классы/сопоставления в моей модели:

@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 другого"?

hibernatecomponentshql

Ответы

Ответ 1 · Stevi Deter

Проблема заключается в in elements(relatedReasons), который генерирует внутренний оператор выбора для полного объекта причины, как с категорией, так и с субъектом.

Вроде так и должно быть elements(relatedReasons.subject)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы