用户表和角色表role通过中间表user_role双主键多对多关联,角色表role和菜单表resource通过中间表role_resource双主键多对多关联。根据用户查询角色,程序运行正常,但是根据角色获取菜单,程序就报错了。以下贴出关键代码,请大家帮助下:
(1)role.java:
private List<Admin> admins=new ArrayList<Admin>();
private List<Resource> resources = new ArrayList<Resource>();
@ManyToMany
@JoinTable(name = "sys_admin_role",
joinColumns = @JoinColumn(name = "roleid"),
inverseJoinColumns = @JoinColumn(name = "adminid"))
public List<Admin> getAdmins() {
return admins;
}
public void setAdmins(List<Admin> admins) {
this.admins = admins;
}
(2)Resource.java:
private List<Role> roles = new ArrayList<Role>();
@ManyToMany
@JoinTable(name = "sys_role_resource",
joinColumns = @JoinColumn(name = "resourceid"),
inverseJoinColumns = @JoinColumn(name = "roleid"))
public List<Role> getRoles() {
return roles;
}
(3)在AdminDao中通过 public List<Role> getRoles(Admin admin); 可以获取真诚的角色信息,但是在RoleDao中 通过
public List<Resource> getResources(Role role); 获取菜单就报错了,打印的sql:
select
resources0_.roleid as roleid1_3_1_,
resources0_.resourceid as resource2_4_1_,
resource1_.id as id1_2_0_,
resource1_.descn as descn2_2_0_,
resource1_.name as name3_2_0_,
resource1_.opentype as opentype4_2_0_,
resource1_.options as options5_2_0_,
resource1_.ordernum as ordernum6_2_0_,
resource1_.pid as pid7_2_0_,
resource1_.resstring as resstrin8_2_0_,
resource1_.restype as restype9_2_0_
from
sys_role_resource resources0_
inner join
sys_resource resource1_
on resources0_.resourceid=resource1_.id
where
resources0_.roleid=?
报错信息:
一月 21, 2016 8:03:29 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet springMvc threw exception
java.lang.IllegalArgumentException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:710)
at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:371)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4509)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:186)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:137)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1108)
at org.hibernate.loader.Loader.processResultSet(Loader.java:964)
at org.hibernate.loader.Loader.doQuery(Loader.java:911)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:312)
at org.hibernate.loader.Loader.loadCollection(Loader.java:2238)
同样的多对多,为什么Admin可以,Role 就不可以?