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

报告相同问题?

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏