Хобрук: Ваш путь к мастерству в программировании

Как преобразовать JPQL с подзапросом в эквивалент Criteria API?

Создайте простую объектную модель, состоящую из 5 сущностей:

  1. Компания
  2. Организация
  3. Адрес
  4. Клуб
  5. Группа

Показывает, что компания, клуб и группа связаны с организациейвведите здесь описание изображения

Компания связана с одной организацией. (Группа и Клуб также связаны с одной Организацией — они однонаправлены, то есть Организация не содержит ссылки на своего владельца). Организация может иметь 0 или более адресов.

Подзапрос можно использовать для доступа к объектам компании на основе определенного почтового индекса, который является атрибутом адреса. Вот запрос JPQL, который может получить доступ к этим компаниям с определенным почтовым индексом.

@Query («выберите p из Company p, Organization org, где (p.organization = org.id) и существует (выберите 1 из Address ad, где zipcode = :zipcode и ad.organization = org.id)»)

Как можно сделать то же самое с помощью JPA Criteria API?

04.06.2012

Ответы:


1

Это выберет компании с предоставленным почтовым индексом, используя внутреннее соединение, это то, что вы хотели?

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Company> cq = cb.createQuery(Company.class);
Root<Organization> root = cq.from(Organization.class);
Join<Organization, Address> adr = root.join("addresses");
cq.select(root.get("company"));
cq.where(cb.equal(adr.get("zipcode"), zipcode));

Вы не сможете получить доступ к компании через организацию, если у нее нет свойства для нее. Если ваша компания имеет ссылку на организацию, вы можете сделать однонаправленное сопоставление с двунаправленным сопоставлением, добавив следующий код в класс организации:

@OneToOne(mappedBy="organization") //Providing the name of property in Company 
private Company company;
04.06.2012
  • JMelnik - спасибо за ваш ответ. Когда я запускаю код, появляется следующее: Метод select(Selection‹? extends Company›) в типе CriteriaQuery‹Company› неприменим для аргументов (Path‹Object›) Имейте в виду ( мое обновление) в том, что нет ссылки от Организации на Компанию. Спасибо еще раз. 04.06.2012
  • JMelnik, вы можете сделать это в Спецификации Spring-данных? (org.springframework.data.jpa.domain.Specification‹Организация›) 21.08.2012
  • Извините, я не знаю о весенних данных, попробуйте применить этот пример к вашему делу самостоятельно. 22.08.2012
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..