2016-04-03 73 views
0

我想開始我的web應用程序,但我得到異常:的UserDetails和休眠例外

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

我很抱歉粘合代碼,但SO需要更少的代碼和更多的細節。

這是我的用戶實體:

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

而且它的角色實體:

@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'類中,你有兩個方法'getAuthorities(..)'和'getRoles(..)'都返回'roles'。你需要'getAutrhorities(..)'方法,也沒有任何休眠'OneToMany'映射。你可能想刪除它並嘗試? –

+0

@MadhusudanaReddySunnapu好吧,我不能刪除'getAuthorities()'方法,但我嘗試返回'null',並且得到相同的異常 –

+0

這與它返回的內容無關。你可以在這個方法上添加'Transient'註釋並嘗試。 –

回答

1

我找到原因針對此問題。如果我們將註釋放在getter之上,那麼Hibernate會自動爲其他未註釋的getter創建列。有兩種變體:

1)移動字段上方的所有註釋。

2)將@Transient添加到不是列的所有getter。