我正在使用JBoss AS 7和IDEA 11.当我尝试部署我的应用程序时,我遇到了这个问题:
我的应用中有两个实体:
首先:
@Entity
@Table(name="users")
public class User extends AbstractEntity {
private static final long serialVersionUID = -3839809902040717567L;
@Column(name="email") private String email;
@Column(name="first_name") private String firstName;
@Column(name="last_name") private String lastName;
@Column(name="middle_name") private String middleName;
@Column(name="password") private String password;
@Column(name="client_id") private int clientId;
@Column(name="user_name") private String userName;
private List<Role> roles;
public User() {
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getClientId() {
return clientId;
}
public void setClientId(int clientId) {
this.clientId = clientId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "users_roles",
joinColumns = {@JoinColumn(name = "user_id")},
inverseJoinColumns = @JoinColumn(name = "role_id"))
public List<Role> getRoles() {
return roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
第二
@Entity
@Table(name="roles")
public class Role extends AbstractEntity {
private static final long serialVersionUID = -192049947690313026L;
@Column(name="ad_name") private String adName;
@Column(name="description") private String description;
@Column(name="name") private String name;
@OneToMany(mappedBy = "roles") private List<RolesPermissions> rolesPermissions;
@ManyToMany(mappedBy = "roles") List<User> users;
public String getAdName() {
return adName;
}
public void setAdName(String adName) {
this.adName = adName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public List<RolesPermissions> getRolesPermissions() {
return rolesPermissions;
}
public void setRolesPermissions(List<RolesPermissions> rolesPermissions) {
this.rolesPermissions = rolesPermissions;
}
}
他们有ManyToMany
个关系。
部署时我有这个例外:
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: users, for columns: [org.hibernate.mapping.Column(roles)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:304)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:288)
at org.hibernate.mapping.Property.isValid(Property.java:216)
可能是什么原因?
P.S。 AbstractEntity
为mappedsuperclass
,其字段为@Id注释。
答案 0 :(得分:3)
您的User
实体没有注释roles
关系。 @ManyToMany
注释应该可以解决问题。
正如@Perception指出的那样,您可能还希望在roles
上填充连接表,例如:
@JoinTable(name="USER_ROLE", joinColumns= @JoinColumn(name="EMP_ID"), inverseJoinColums = @JoinColumn(name="ROLE_ID"))
编辑:只有在使用现有架构或默认表和列名称不适合您时,此注释才有意义。如果让Hibernate生成表,则可以安全地省略@JoinTable
注释。