尽管这个问题问了很多遍,并且我已经使用了所有建议,但是仍然出现此错误。
User.java是
@Entity @Table(name = "USER") public class User implements UserDetails, Serializable { private static final long serialVersionUID = 2L; @Id @Column(name = "USER_ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name = "USERNAME") private String username; @Column(name = "PASSWORD") private String password; @Column(name = "NAME") private String name; @Column(name = "EMAIL") private String email; @Column(name = "LOCKED") private boolean locked; @OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER) @ElementCollection(targetClass=Role.class) @Column(name = "ROLE_ID") private Set<Role> roles; @Override public GrantedAuthority[] getAuthorities() { List<GrantedAuthorityImpl> list = new ArrayList<GrantedAuthorityImpl>(0); for (Role role : roles) { list.add(new GrantedAuthorityImpl(role.getRole())); } return (GrantedAuthority[]) list.toArray(new GrantedAuthority[list.size()]); } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return !isLocked(); } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public boolean isLocked() { return locked; } public void setLocked(boolean locked) { this.locked = locked; } @Override public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void setRoles(Set<Role> roles) { this.roles = roles; } public Set<Role> getRoles() { return roles; } }
而Role.java是
@Entity @Table(name="ROLE") public class Role implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="ROLE_ID") private long id; @Column(name="USERNAME") private String username; @Column(name="ROLE") private String role; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } }
这是我第一次尝试使用JPA进行hibernate注释。因此,任何建议都将非常有帮助。
对于hibernate,pom.xml的依赖项是:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate</artifactId> <version>3.5.4-Final</version> <type>pom</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.5.4-Final</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.4-Final</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>3.1.0.GA</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.5.4-Final</version> <type>jar</type> <scope>compile</scope> </dependency>
我不知道这个错误。
谢谢。
解:
@Entity @Table(name = "USER") @Access(AccessType.FIELD) public class User implements UserDetails, Serializable { private static final long serialVersionUID = 2L; @Id @Column(name = "USER_ID", updatable=false, nullable=false) @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name = "USERNAME") private String username; @Column(name = "PASSWORD") private String password; @Column(name = "NAME") private String name; @Column(name = "EMAIL") private String email; @Column(name = "LOCKED") private boolean locked; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = Role.class) @JoinTable(name = "USER_ROLE", joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "ROLE_ID") }) private Set<Role> roles; @Override public GrantedAuthority[] getAuthorities() { List<GrantedAuthorityImpl> list = new ArrayList<GrantedAuthorityImpl>(0); for (Role role : roles) { list.add(new GrantedAuthorityImpl(role.getRole())); } return (GrantedAuthority[]) list.toArray(new GrantedAuthority[list.size()]); } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return !isLocked(); } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } public long getId() { return id; } public void setId(long id) { this.id = id; } @Override public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Override public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public boolean isLocked() { return locked; } public void setLocked(boolean locked) { this.locked = locked; } public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } }
Role.java与上面相同。