henryzsf 2013-08-11 00:01
浏览 442
已采纳

Jpa方式多对多关系中实体对象间如何通过一个实体获取另一实体的对象

项目是ssh三大框架的,数据库是通过实体对象PO用注解的方式生成的。现在有两个PO实体,一个是角色,一个是菜单。他们之间是多对多关系,数据库会生成一张中间的关联表(仅包含ROEL_ID和TREE_ID),现在我想做权限分配,就是实现根据角色分配菜单的功能。在RoleAction这边想通过roleService.getRole(id).getTrees()的方式得到该角色下相应的菜单,但总是报如下错误:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: wteam.pojo.RolePO.trees, no session or session was closed

类RolePO和TreePO如下,Role是维护端,网上很多说多对多用懒加载的方式比较好,但是报错说session关闭了我又取不到结果。我如果换成急加载的方式,是能得到该RoleI下的Tree表了,但是查询Role表就出现问题了,记录会变成很多条,而且还是重复的。就是不知道哪里出了问题

 

public class RolePO implements Serializable{
@Entity
@Table(name="sys_role")
public class RolePO implements Serializable{
        //角色PO
    private static final long serialVersionUID = -6889909565150942238L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "ROLE_ID")
    private int roleId; //角色标识位
    
    @Column(name = "NAME",unique = true,nullable = false)
    private String name;    //角色名称
    
    @Column(name = "DISCRIPTION")
    private String discription; //角色描述

    @ManyToMany(targetEntity = TreePO.class, cascade = CascadeType.REFRESH)
    @JoinTable(name = "sys_role_tree_menu", joinColumns = { @JoinColumn(name = "ROLE_ID")}, inverseJoinColumns = { @JoinColumn(name = "TREE_ID") })
    private List<TreePO> trees;

        //省略set、get方法
}
@Entity
@Table(name="sys_tree_menu")
public class TreePO implements Serializable{
    private static final long serialVersionUID = -1549993655782216421L;
    //菜单PO
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "TREE_ID")
    private int treeId; //树形导航标识位

        @Column(name = "NAME",unique = true,nullable = false)
    private String name;    //名称

    @ManyToMany(cascade = CascadeType.MERGE,mappedBy = "trees")
    private List<RolePO> roles;

    //省略其他属性、set()、get()...
}

 

  • 写回答

2条回答 默认 最新

  • Dead_Knight 2013-08-11 08:27
    关注

    web中增加过滤器
    [code="java"]

    hibernateOpenSessionInViewFilter
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)