I am using JBoss AS 7 and IDEA 11. While I am trying to deploy my app I have this trouble:
There are two entities in my app:
First:
@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;
}
}
Second:
@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;
}
}
They have ManyToMany relations.
While deploying I have this exception:
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)
What could be the reason?
P.S. AbstractEntity is mappedsuperclass and have field with @Id annotation.
Your
Userentity does not have therolesrelation annotated. A@ManyToManyannotation should do the trick.As @Perception pointed out, you might also want to spacify the join table on the
roles, e.g:EDIT: This annotation is only relevant if you are working with an existing schema or if the default table and column names don’t suit you. If you let Hibernate generate the table, you can safely omit the
@JoinTableannotation.