2016-12-15 69 views
0

我有一個HQL查詢:休眠路徑加入,但路徑設置

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

而且它顯示了一個錯誤,雖然路徑設置。我嘗試了不同的hql變體,但錯誤仍然相同。我使用這兩個實體從數據庫的春季安全登錄,它工作正常。但是,當我試圖讓用戶與指定的角色,它不起作用。 我的實體:

@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跟蹤 – Pradeep

+1

您的查詢的內部聯接部分不正確。去UserRoles。你可以這樣做'from User u內部連接u.userRoles ur'看一下hibernate文檔。 https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins –

+0

爲什麼不能正常工作?提供一些細節 –

回答

1

而是明確JOIN嘗試用逗號符號,並更改第二JOINUserRole,如下:

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 users = session.createQuery(「this hql」)的列表?我如何解析它? – Papich

+0

它只顯示'[Ljava.lang.Object; @ 4c87c910 ...' – Papich

+0

如果你只想要用戶列表中,你必須完成查詢如下:從.... –

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