2016-04-03 22 views
0

hazırda bekletme benim web uygulaması başlatmaya çalışıyorum, ancak özel durum almak:UserDetails ve istisna

java.util.Collection, at table: user, for columns: [org.hibernate.mapping.Column(authorities)] 

Ben bitişimli kodu için üzgünüm ama SO az kod ve daha fazla ayrıntı gerektirir.

Benim Kullanıcı varlıktır:

@Entity 
@Table(name = "user") 
public class User extends BaseEntity implements UserDetails { 
    private String email; 
    private String password; 
    private Set<Role> roles; 
    @Column(name = "email", nullable = false, unique = true) 
    public String getEmail() {return email;} 
    public void setEmail(String email) {this.email = email;} 
    @Column(name = "password", nullable = false) 
    public String getPassword() {return password;} 
    public void setPassword(String password) {this.password = password;} 
    @ManyToMany 
    @JoinTable(name = "user_role", 
      joinColumns = {@JoinColumn(name = "user", referencedColumnName = "id")}, 
      inverseJoinColumns = {@JoinColumn(name = "role", referencedColumnName = "name")}) 
    public Set<Role> getRoles() { return roles; } 
    public void setRoles(Set<Role> role) {this.roles = role;} 
    @Override 
    public Collection<? extends GrantedAuthority> getAuthorities() {return roles;} 
    @Override 
    public String getUsername() { return email; } 
    @Override 
    public boolean isAccountNonExpired() {return true; } 
    @Override 
    public boolean isAccountNonLocked() { return true; } 
    @Override 
    public boolean isCredentialsNonExpired() { return true; } 
    @Override 
    public boolean isEnabled() { return true; } 
} 

Ve Rol varlıktır:

@Entity 
@Table(name = "Role") 
public class Role implements GrantedAuthority, Serializable { 
    private String name; 
    @Id 
    @Column(name = "name") 
    public String getName() {return name;} 
    public void setName(String name) { this.name = name; } 
    @Override 
    public String getAuthority() {return name;} 
} 
+0

'User' sınıfınızda' getAuthorities (..) 've' getRoles (..) 'iki yönteminiz vardır, her ikisi de 'roller' döndürür. "GetAutrhorities (..)" yöntemine ihtiyacınız var mı ve ayrıca herhangi bir "OneToMany" eşlemesi yok. Bunu kaldırmak ve denemek isteyebilirsiniz? –

+0

@MadhusudanaReddySunnapu iyi, getAuthorities() 'yöntemini silemiyorum, ama içinde 'null' döndürmeyi deneyin ve aynı istisnayı alıyorum –

+0

Geri dönüşü ile ilgili değil. Bu yönteme 'Geçiş 'açıklaması ekleyebilir ve deneyebilirsiniz. –

cevap

1

Ben Bu sorunun nedenini buldum. Eğer alıcıların üstüne bir açıklama koyarsak, otomatik olarak diğer açıklayıcılar için ek açıklanmamış sütunlar oluşturmaya çalışın. İki çeşit vardır:

1) Tüm ek açıklamaları alanların üstüne taşıyın. Bir sütun olmayan tüm alıcılara @Transient ekleyin.