2016-04-03 11 views
0

Ich versuche, meine Web-Anwendung zu starten, aber ich Ausnahme:Userdetails und Hibernate Ausnahme

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

Ich bin für agglutinieren Code sorry, aber es erfordert weniger Code und weitere Details.

Es ist mein Benutzer Einheit:

@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; } 
} 

Und es ist die Rolle Einheit:

@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

In Ihrer 'User' Klasse haben Sie zwei Methoden' getAuthorities (..) 'und' getRoles (..) 'beide gibt' roles' zurück. Benötigen Sie die 'getAutrhorities (..)' Methode und es gibt auch kein "OneToMany" Mapping im Hibernate. Vielleicht möchten Sie das entfernen und versuchen? –

+0

@MadhusudanaReddySunnapu gut, ich kann Methode 'GetAuthorities()' nicht löschen, aber ich versuche, 'null' zurückgeben und ich bekomme die gleiche Ausnahme –

+0

Es geht nicht darum, was es zurückgibt. Können Sie die Anmerkung "Transient" für diese Methode hinzufügen und versuchen. –

Antwort

1

fand ich die Ursache für dieses Problem. Wenn wir Annotation über Getter setzen, versucht Hibernate automatisch, eine Spalte für andere Getters zu erstellen, die nicht kommentiert sind. Es gibt zwei Varianten:

1) Verschieben Sie alle Anmerkungen über die Felder.

2) Fügen Sie @Transient zu allen Gettern hinzu, die keine Spalten sind.

Verwandte Themen