JPQL ManyToMany Query Issue - PullRequest
       24

JPQL ManyToMany Query Issue

0 голосов
/ 05 апреля 2011

Мое сопоставление сущностей выглядит следующим образом:

public class EntertainmentContentBean implements Serializable, Cloneable {
.
.
.
@ManyToMany
    @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
    @JoinTable(schema = "etmt", name = "content_operator", joinColumns = @JoinColumn(name = "content_id"), inverseJoinColumns = @JoinColumn(name = "operator_id"))
    public Set<Operator> getOperators() {
        return operators;
    }
.
.
.

}

У меня есть особое требование, в котором я хочу получить записи EntertainmentContentBean на основе следующих критериев:

  • Если нет записей оператораприсутствуют
  • Если присутствуют записи оператора, то список операторов должен содержать переданный объект оператора - параметр

Я попытался выполнить следующий запрос, но он не возвращает ожидаемые записи:

SELECT NEW MAP (content AS content, id AS record_id)
        FROM EntertainmentContentBean contentEntry
        WHERE (contentEntry.operators is empty or (select op from Operator op where lower(op.key) = lower(:operator)) MEMBER OF contentEntry.operators))

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Я использовал подзапрос, чтобы получить желаемые результаты.

0 голосов
/ 05 апреля 2011

Я не уверен, что именно не так с этим запросом, но я бы посоветовал вам переписать его в более простой форме, возможно, это поможет:

SELECT DISTINCT NEW MAP (ce.content AS content, ce.id AS record_id)
FROM EntertainmentContentBean ce LEFT JOIN ce.operators op
WHERE op IS NULL OR lower(op.key) = lower(:operator)
...