У меня есть 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? На самом деле моя проблема решена, но я хотел бы знать, как это сделать.
Мне будет полезно, если кто-нибудь объяснит конструкцию запроса.
Любые предложения !!