Не могу построить HQL-запрос, который связывает объекты, которые связаны через «содержащиеся в коллекции элементов отношения» - PullRequest
0 голосов
/ 25 мая 2011

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

@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 spokati1_ где (versati1_subject_relatestor2_.category, relatestor2_.subject_id из up_sale_to_registered_reasons relatestor2_ где upsalereas0_.id = relatestor2_.UpSaleReason_id)) и spokatiati__.id =?]

Что я должен сделать, чтобы связать каждый из двух предметов в HQLдругое через отношение, которое можно описать как «значение свойства компонента одной сущности должно содержаться в ElementCollection другой»?

1 Ответ

0 голосов
/ 26 мая 2011

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

Похоже, что должно быть elements(relatedReasons.subject)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...