Mam 3 tabele, Role[roleId, roleName]
, Token[tokenID, tokenName]
& ROLETOKENASSOCIATION[roleId, tokenID]
. Trzecia została stworzona automatycznie przez hibernację. Teraz, jeśli po prostu napiszę zapytanie, aby uzyskać wszystkie obiekty z klasy Role, oznacza to, że wszystkie obiekty roli są przypisane wraz z powiązanym tokenem & tokenName.Jak napisać kwerendę HQL dla wielu do wielu stowarzyszeń?
Po prostu chciałem, aby asocjacja była jednokierunkowa. tj: Role ---> Żetony Więc adnotacji w klasie Rola wygląda,
@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
Teraz chcę tokenNames dla konkretnego RoleId. Najpierw wysłałem zapytanie takie jak to SELECT tkns.tokenName FROM Role WHERE Role.roleId=:roleId
Ale skończyłem z pewnym błędem dereferencji.
Następnie zmieniłem zapytanie na SELECT tkns FROM Role r WHERE r.roleId=:roleId
Teraz mam to, co chciałem. Ale przychodzi również z rolą.
Jak mogę dostać tokenName się? W rzeczywistości mój problem został rozwiązany, ale chciałbym wiedzieć, jak to zrobić.
To będzie pomocne dla mnie, jeśli ktoś wyjaśni Budowę zapytania.
Wszelkie sugestie !!
Właściwie jestem nowy i HQL hibernacji. Byłoby mi pomocne, gdybyś wyjaśnił zapytanie! –
@NooB: Zaktualizowano. – axtavt