2016-12-15 5 views
0

У меня есть запрос HQL:зимуют путь ожидается присоединиться, но путь установлен

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

И это показывает ошибку, хотя путь установлен. Я пробовал разные варианты hql, но ошибка остается прежней. Я использую эти 2 мандата для входа в учетную запись весны с db, и он отлично работает. Но когда я пытаюсь получить пользователя с указанной ролью, он не работает. Мои объекты:

@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 = "[email protected]"; 

    @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); 

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; 

Если я изменить мой HQL запрос на:

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

он показывает ошибку,

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

вы можете вставить эр ror trace – Pradeep

+1

Ваша внутренняя часть соединения вашего запроса неверна. Чтобы перейти к UserRoles. Вы можете сделать так, как «от пользователя u внутреннее соединение u.userRoles ur» Взгляните на документацию спящего режима. https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins –

+0

Почему он не работает? Дайте некоторые данные –

ответ

1

Вместо явного JOIN попробовать с разделителями нотацией, и изменить вторую JOIN таблицы с UserRole, следующим образом:

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

Если вы хотите элементы только пользователей выполнить запрос следующим образом:

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

Теперь он работает, но какой тип будет списком пользователей List = session.createQuery («this hql»)? как я могу его разобрать? – Papich

+0

показывает только '[Ljava.lang.Object; @ 4c87c910 ...' – Papich

+0

Если вы хотите только список пользователей, вы должны заполнить запрос следующим образом: select u from .... –

0

У вас есть опечатка в вашем запрос, так как ваш User объект не имеет userRole, но userRoles

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