I have to deal with some strange problem, I have been looking for it for many hours, but did not know how to solve it.
Here is the situation: I have two Roles and Privileges classes with ManyToMany relation. When adding privileges to a role calling saveOrUpdate(role) , I got into this exception.
here is the role class
@Entity @Table(name = "ROLES") public class Role implements GenericDomain { private static final long serialVersionUID = -7620550658984151796L; private Long id; private String code; private String name; private Set<User> users = new HashSet<User>(0); private Set<Privilege> privileges = new HashSet<Privilege>(0); public Role() { } public Role(String code, String name) { this.code = code; this.name = name; } @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "ID") public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name = "CODE", unique = true, nullable = false, length = 16) @NotEmpty(message= "password.required") @Length(min = 3, max = 16) public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Column(name="NAME", nullable = false, length = 64) @NotEmpty @Length(min = 1, max = 32) public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToMany(cascade=CascadeType.ALL) @JoinTable(name = "ROLES_PRIVILEGES" , joinColumns = { @JoinColumn(name = "ROLE_ID") } , inverseJoinColumns = { @JoinColumn(name = "PRIVILEGE_ID") } ) public Set<Privilege> getPrivileges() { return this.privileges; } public void setPrivileges(Set<Privilege> privileges) { this.privileges = privileges; } }
Here is a privilege class
@Entity @Table(name = "PRIVILEGES") public class Privilege implements GenericDomain { private static final long serialVersionUID = 4649689934972816194L; private Long id; private String code; private Set<Role> roles = new HashSet<Role>(0); public Privilege() { } public Privilege(String code) { this.code = code; } @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "ID") public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Column(name = "CODE", unique = true, nullable = false, length = 16) @NotEmpty(message= "password.required") @Length(min = 3, max = 16) public String getCode() { return code; } public void setCode(String code) { this.code = code; } @ManyToMany(cascade=CascadeType.REFRESH, mappedBy="privileges") public Set<Role> getRoles() { return this.roles; } public void setRoles(Set<Role> roles) { this.roles = roles; }
}
And with the exception of:
IllegalArgumentException in class: com.stunaz.domain.Privilege, getter method of property: id .... javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.stunaz.domain.Privilege.id .... java.lang.IllegalArgumentException: object is not an instance of declaring class
It seems that something is wrong with my mapping, that somewhere I have to pass the object, but I pass Id.but, I do not see this error.
Thanks for any advice.
storm_buster
source share