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条)

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题