hibernate4 多对多关联查询报错参数类型不对是怎么回事儿?

Junior_s 2016-01-21 08:00:15
用户表和角色表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 就不可以?
...全文
264 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 u010126977 的回复:
[quote=引用 1 楼 shijing266 的回复:] @ManyToMany中增加mappedBy 你试试这个属性 参考
非常感谢提醒,虽然之前试过。但是我把 @ManyToMany(mappedBy = "students") 放在get方法上,就报错,幸亏您提醒,我又试了一遍,把这个注解放在属性上,就可以。非常感谢![/quote] 不客气,结贴吧
Junior_s 2016-01-22
  • 打赏
  • 举报
回复
引用 1 楼 shijing266 的回复:
@ManyToMany中增加mappedBy 你试试这个属性 参考
非常感谢提醒,虽然之前试过。但是我把 @ManyToMany(mappedBy = "students") 放在get方法上,就报错,幸亏您提醒,我又试了一遍,把这个注解放在属性上,就可以。非常感谢!
Junior_s 2016-01-22
  • 打赏
  • 举报
回复
参考[/quote] 这个之前试过,没有什么变化,还是同样的错误。
踩沙滩 2016-01-22
  • 打赏
  • 举报
回复
不客气,结贴吧
  • 打赏
  • 举报
回复
@ManyToMany中增加mappedBy 你试试这个属性

参考

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧