Я настоятельно рекомендую использовать аннотацию поверх переменных, а не аннотацию для методов. Это НЕ вопрос вкуса. Это ОБЯЗАТЕЛЬНО, если вы хотите объявить класс USER, который реализует UserDetails из Spring Security.
Таким образом, следующий код будет работать, и это единственный способ.
@Entity
class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany
private List<UserRole> roles;
//....Setters and Getters..........
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
@Override
public boolean isAccountNonExpired() {
return false;
}
@Override
public boolean isAccountNonLocked() {
return false;
}
@Override
public boolean isCredentialsNonExpired() {
return false;
}
@Override
public boolean isEnabled() {
return false;
}
Если вы разместите все аннотации в функциях получения, без отображения @OneToMany
или @ManyToMany
... это будет работать, но если вам понадобится использовать эти отношения, то Hibernate будет нарушен. Я думаю, что Hibernate уже использует аннотацию поверх переменной, поэтому он не любит аннотацию вершины функций по непротиворечивой причине.
Следовательно, придерживайтесь того, что является обычным для фреймворка, у вас не будет кодов позже.