HHH000122: IllegalArgumentException in class….getter method of property: id
我的项目是微服务架构,用的是spring boot2 ,这几天碰到一个特别奇怪的问题。
我有一个角色表Group,角色拥有的权限Rights
//角色表
public class Group(){
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="group_id")
private Integer group_id;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinColumn(name="group_id",referencedColumnName="group_id")
private Set<Rights> rights = new HashSet<Rights>();
//getter setter省略
}
//角色——权限表
public class Rights(){
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="rights_id")
private Integer rights_id;
@Column(name="group_id")
private Integer group_id;
//getter setter省略
}
调用服务去查找角色及其权限,没有任何问题。
但保存角色时,如果角色有权限,即group.rights不为空时,保存总是报错。
HHH000122: IllegalArgumentException in class: com.crp.qa.qaAuthorization.domain.pojo.QaSysGroupRights, getter method of property: rightsId
Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: IllegalArgumentException occurred calling getter of com.crp.qa.qaAuthorization.domain.pojo.QaSysGroupRights.rightsId; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.crp.qa.qaAuthorization.domain.pojo.QaSysGroupRights.rightsId
百度了半天,发现可能与hibernate版本有关,最后发现有个相似的问题:
Class loading error with Spring Boot and Hibernate 5
这个老外说,当hibernate5与devtools一起用的时候,就报错。
而devtools是spring boot做热加载的。
于是,我把pom.xml里的devtools注释掉,重启服务,发现就正常了。
估计还有别的方法可以解决,比如降低hibernate的版本到4.3.5以下,但是我简单试了下没效果,可能是我做的不对。
这个问题困扰了我好几天,记录下来以防忘记。