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
.
- Как я могу получить объект сеанса, если у меня есть entitymanager
- Установка значений по умолчанию для столбцов в JPA
- Как создать метамодель JPA 2.0?
- Пожалуйста, объясните: insertable = false, updatable = false
- Неправильное упорядочение в сгенерированной таблице в jpa
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
назад?
- Недействительность сессии JPA EntityManager
- JPA: каков правильный шаблон для итерации по большим наборам результатов?
- Что называется ссылочным именем ColumnName, используемым в JPA?
- Пакетные вставки с JPA / EJB3
- Как настроить Spring для создания JPA (Hibernate) и JDBC (JdbcTemplate или MyBatis) совместно использовать одну и ту же транзакцию
- Как создать таблицу объединений с аннотациями JPA?
- Java - JPA - Генераторы - @SequenceGenerator
- Спящий режим, весна, JPS и изоляция - индивидуальная изоляция не поддерживается
Присоединение к соотношению «один ко многим» в 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 { ... }