Tôi có 3 bảng, Role[roleId, roleName]
, Token[tokenID, tokenName]
& ROLETOKENASSOCIATION[roleId, tokenID]
. Người thứ ba được tạo ra tự động bởi ngủ đông. Bây giờ nếu tôi chỉ đơn giản là viết một truy vấn để có được tất cả các đối tượng từ lớp vai trò có nghĩa là, nó cung cấp cho tất cả các đối tượng vai trò cùng với tokenID đính kèm & tokenName.Cách viết truy vấn HQL cho nhiều liên kết?
Tôi chỉ muốn liên kết như một chiều. tức là: Vai trò ---> Tokens Vì vậy, các chú thích trong lớp Vai trò có vẻ như,
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int roleId;
private String roleName;
@ManyToMany
@JoinTable(name="ROLE_TOKEN_ASSOCIATION",
joinColumns={@JoinColumn(name="roleId")},
inverseJoinColumns={@JoinColumn(name="tokenID")})
private List<Token> tkns;
//Getters & Setters
Bây giờ tôi muốn tokenNames cho Id vai trò cụ thể. Đầu tiên tôi thực hiện một truy vấn như thế này SELECT tkns.tokenName FROM Role WHERE Role.roleId=:roleId
Nhưng, tôi đã kết thúc với một số lỗi dereference.
Sau đó, tôi đã thay đổi truy vấn thành SELECT tkns FROM Role r WHERE r.roleId=:roleId
Bây giờ tôi đã có những gì tôi muốn. Nhưng nó cũng đi kèm với roleId.
Làm cách nào để tôi nhận được tokenName? Thực ra vấn đề của tôi đã được giải quyết, nhưng tôi muốn biết cách thực hiện.
Nó sẽ hữu ích cho tôi, nếu có ai đó giải thích về Xây dựng truy vấn.
Bất kỳ đề xuất nào !!
Trên thực tế, tôi mới để ngủ đông & HQL. Nó sẽ hữu ích cho tôi nếu bạn giải thích các truy vấn !!! –
@NooB: Đã cập nhật. – axtavt