JPA: ПРИСОЕДИНЯЙТЕСЬ в JPQL

Я думал, что знаю, как использовать JOIN в JPQL но, видимо, нет. Может кто-нибудь мне помочь?

 select b.fname, b.lname from Users b JOIN Groups c where c.groupName = :groupName 

Это дает мне исключение

 org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing the query Internal Exception: org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException 

Users есть отношения OneToMany с Groups .

Users.java

 @Entity public class Users implements Serializable{ @OneToMany(mappedBy="user", cascade=CascadeType.ALL) List groups = null; } 

Groups.java

 @Entity public class Groups implements Serializable { @ManyToOne @JoinColumn(name="USERID") private Users user; } 

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

 String temp = (String) em.createNamedQuery("***") .setParameter("groupName", groupName) .getSingleResult(); 

*** представляют собой имя запроса выше. Таким образом, fname и lname объединяются внутри temp или я возвращаю List назад?

Присоединение к соотношению «один ко многим» в JPQL выглядит следующим образом:

 select b.fname, b.lname from Users b JOIN b.groups c where c.groupName = :groupName 

Когда в предложении select указано несколько свойств, результат возвращается как Object[] :

 Object[] temp = (Object[]) em.createNamedQuery("...") .setParameter("groupName", groupName) .getSingleResult(); String fname = (String) temp[0]; String lname = (String) temp[1]; 

Кстати, почему ваши сущности названы во множественном числе, это запутывает. Если вы хотите иметь имена таблиц во множественном числе, вы можете использовать @Table чтобы указать имя таблицы для объекта явно, поэтому оно не мешает зарезервированным словам:

 @Entity @Table(name = "Users") public class User implements Serializable { ... } 
  • JPA CascadeType.ALL не удаляет сирот
  • Spring-Data FETCH JOIN with Paging не работает
  • Почему Hibernate Open Session in View считается плохой практикой?
  • @GeneratedValue полиморфный абстрактный суперclass над MySQL
  • Дилемма JPA hashCode () / equals ()
  • Установка параметра в виде списка для выражения IN
  • Hibernate: «Поле« id »не имеет значения по умолчанию»
  • Данные LOAD и CACHE с областью приложения с @Singleton и @Stateless
  • Невозможно использовать генерацию ключа столбца идентификатора с (TABLE_PER_CLASS)
  • JPA - Возврат автоматически сгенерированного идентификатора после сохранения ()
  • JPA: как преобразовать собственный набор результатов запроса в коллекцию classов POJO
  • Давайте будем гением компьютера.