Tengo una consulta hql:

"from User u inner join UserRole ur on ur.user_name = u.user_name and ur.user_role =ROLE_MANAGER "

Y muestra un error aunque se establece la ruta. Probé diferentes variantes de hql pero el error sigue siendo el mismo. Utilizo esas 2 entradas para el inicio de sesión de seguridad de primavera desde db y funciona bien. Pero cuando intento conseguir un usuario con un rol específico, no funciona. Mis entidades:

@Entity
@Table(name = "USERS")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id")
    private int user_id;


    @Column(name = "username", nullable = false, unique = true)
    private String username;

    @Column(name = "passwort", nullable = false)
    private String password;

    @Column(name = "email")
    private String email = "hromnikforever@gmail.com";

    @Column(name = "enabled", nullable = false)
    private int enabled = 1;

    @Autowired
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Set<UserRole> userRoles = new HashSet<UserRole>(0);

Entidad UserRole:

@Entity
@Table(name = "USER_ROLES")
public class UserRole {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id",unique = true, nullable = false)
    private int user_role_id;

    @Column(name = "username")
    private String username;

    @Column(name = "user_role")
    private String user_role;

Si cambio mi consulta HQL a:

from User u inner join u.userRole ur on ur.user_name = u.user_name
and ur.user_role =ROLE_MANAGER "

Muestra un error que

 could not resolve property: userRole of: com.webproject.User [from com.webproject.User u inner join u.userRole ur on ur.user_name = u.user_name and ur.user_role =ROLE_MANAGER ]
0
Papich 15 dic. 2016 a las 18:29

2 respuestas

La mejor respuesta

En lugar de ello, pruebe JOIN explícitamente con la notación de coma y cambie la segunda tabla JOIN con UserRole, de la siguiente manera:

from User u, UserRole ur
where ur.user_name = u.user_name
and ur.user_role = ROLE_MANAGER

Si solo desea elementos de usuario, complete su consulta de la siguiente manera:

select u from User u, UserRole ur
where ur.user_name = u.user_name
and ur.user_role = ROLE_MANAGER
1
Joe Taras 16 dic. 2016 a las 07:21

Tiene un error tipográfico en su consulta, ya que su entidad User no tiene una userRole, pero userRoles

from User u 
inner join u.userRoles ur on ur.user_name = u.user_name
                          and ur.user_role = ROLE_MANAGER
0
marc_s 20 dic. 2016 a las 07:58