CriteriaBuilder JPA 2.0 Eclipselink - PullRequest
       21

CriteriaBuilder JPA 2.0 Eclipselink

3 голосов
/ 01 сентября 2010

Если я хочу что-то подобное с EclipseLink и JPA 2.0

ВЫБРАТЬ ... ОТ ... ГДЕ имя1 = значение1 И имя2 = значение2 ИЛИ имя3 = значение3

Какой самый лучший способ ?? В официальном сказать что-то вроде:

cq.where(cb.equal(pet.get(Pet_.name), "Fido")
    .and(cb.equal(pet.get(Pet_.color), "brown");

http://download.oracle.com/javaee/6/tutorial/doc/gjivm.html#gjiwu

, но невозможно с eclipselink, потому что cb.equal(pet.get(Pet_.name), "Fido") - это запрос Predicate, а не anidate с .and

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 02 сентября 2010

Глядя на API-операторы «и» и «или», операторы CriteriaBuilder выглядят так:

cq.where(cb.and(
    cb.equal(pet.get(Pet_.name), "Fido"),
    cb.equal(pet.get(Pet_.color), "brown")));

Используя пример "name", где предложение будет:

cq.where(cb.or(
    cb.and(cb.equal(BeanName_.name1, "value1"),
    cb.equal(BeanName_name2, "value2")),
    cb.equal(BeanName_.name3, "value3")));

если вы хотите использовать параметры, просто замените жестко закодированные значения (например, "value1") параметрами:

cb.parameter(String.class, "value1");
0 голосов
/ 12 марта 2012

В качестве альтернативы вы можете использовать QueryDSL , см. Введение в разделе http://blog.mysema.com/2010/04/querydsl-as-alternative-to-jpa-2.html.

QueryDSL является отличным дополнением для JPA (в вашем случае для EclipseLink), но работает также для JDO, коллекций, SQL / JDBC, Lucene, MongoDB ....

...