Как написать HQL-запрос для многих ко многим ассоциациям?

У меня есть 3 таблицы, роль [roleId, roleName] , Token [tokenID, tokenName] и ROLETOKENASSOCIATION [roleId, tokenID] . Третий был создан автоматически с помощью спящего режима. Теперь, если я просто напишу запрос, чтобы получить все объекты из средств класса Role, он предоставит все объекты роли вместе с ассоциированными tokenID и tokenName.

Я просто хотел, чтобы ассоциация была однонаправленной. т.е.: Роли ---> Жетоны Итак, аннотация в классе Role выглядит так:

@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

Теперь мне нужны tokenNames для конкретного roleId. Сначала я сделал такой запрос SELECT tkns.tokenName FROM Role WHERE Role.roleId =: roleId Но у меня возникла ошибка разыменования.

Затем я изменил запрос на SELECT tkns FROM Role r WHERE r.roleId =: roleId Теперь я получил то, что хотел. Но у него тоже есть roleId.

Как мне получить сам tokenName? На самом деле моя проблема решена, но я хотел бы знать, как это сделать.

Мне будет полезно, если кто-нибудь объяснит конструкцию запроса.

Любые предложения !!

12
задан 28 September 2010 в 21:09
поделиться