Hibernate 错误:org.hibernate.LazyInitializationException: failed to lazily initial
有两张多对多关联表:
@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)