Hibernate 错误:org.hibernate.LazyInitializationException: failed to lazily initial

有两张多对多关联表:

@Entity
@AccessType("field")
@Table(name="MENU")
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name="menu_id")
private Long menuId;

@Column(name="menu_Name")
private String menuName;

/**
* 角色-菜单关联
*/
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch=FetchType.LAZY)//合并
@JoinTable(name = "ROLE_MENU", joinColumns = { @JoinColumn(name = "menu_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") })
// @PersistenceContext(type = PersistenceContextType.EXTENDED)
private Set<Role> roles = new LinkedHashSet<Role>();

public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}



@Entity
@AccessType("field")
@Table(name="ROLE")
public class Role implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name="role_id")
private Long roleId;

@Column(name="role_Name")
private String roleName;


/**
* 角色-菜单关联
*/
@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.LAZY)
@JoinTable(name = "ROLE_MENU", joinColumns = { @JoinColumn(name = "role_id") }, inverseJoinColumns = { @JoinColumn(name = "menu_id") })
private Set<Menu> menus = new LinkedHashSet<Menu>();

public Set<Menu> getMenus() {
return menus;
}
public void setMenus(Set<Menu> menus) {
this.menus = menus;
}
}


注意:一定要两张表分别@JoinTable(name = "ROLE_MENU")

在Role在引用menus的时候,报:org.hibernate.LazyInitializationException: failed to lazily initial

解决办法:roleDao.getHibernateTemplate().initialize(role.getMenus());


当关联表中不存在此记录时,role.getMenus();将会报错:org.hibernate.ObjectNotFoundException: No row with the given identifier exists:

解决办法:加上 @NotFound(action = NotFoundAction.IGNORE)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值