JPA: UNIRSE en JPQL
Pensé que sabía cómo usar JOIN
en JPQL
pero aparentemente no. ¿Alguien puede ayudarme?
select b.fname, b.lname from Users b JOIN Groups c where c.groupName = :groupName
Esto me da una excepción
org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query
Internal Exception: org.eclipse.persistence.internal.libraries.antlr.runtime.EarlyExitException
Users
tener una relación OneToMany con Groups
.
Users.java
@Entity
public class Users implements Serializable{
@OneToMany(mappedBy="user", cascade=CascadeType.ALL)
List<Groups> groups = null;
}
Groups.java
@Entity
public class Groups implements Serializable {
@ManyToOne
@JoinColumn(name="USERID")
private Users user;
}
Mi segunda pregunta es digamos que esta consulta devuelve un resultado único, entonces si lo hago
String temp = (String) em.createNamedQuery("***")
.setParameter("groupName", groupName)
.getSingleResult();
***
representa el nombre de la consulta anterior. Así lo hace fname
y lname
concatenado dentro de temp
o me sale un List<String>
¿volver?
1 answers
Join on one-to-many relation in JPQL se ve de la siguiente manera:
select b.fname, b.lname from Users b JOIN b.groups c where c.groupName = :groupName
Cuando se especifican varias propiedades en la cláusula select
, el resultado se devuelve como Object[]
:
Object[] temp = (Object[]) em.createNamedQuery("...")
.setParameter("groupName", groupName)
.getSingleResult();
String fname = (String) temp[0];
String lname = (String) temp[1];
Por cierto, por qué sus entidades se nombran en forma plural, es confuso. Si desea tener nombres de tabla en plural, puede usar @Table
para especificar el nombre de tabla para la entidad explícitamente, para que no interfiera con las palabras reservadas:
@Entity @Table(name = "Users")
public class User implements Serializable { ... }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-22 16:31:46