[英]JPA mapping unidirectional @ManyToMany with struts2
大家好
我对@OneToMany
单向关联有@OneToMany
。 基本上在我的模型中,我有两个实体: Player
和Role
。 我将这种关系与@ManyToMany
映射为原因:一个玩家可以拥有更多角色,并且一个角色可以与多个玩家关联。
播放器
@Entity
public class Player implements Serializable {
...
@ManyToMany
private List<Role> roles;
...
}
角色.java
@Entity
public class Role implements Serializable {
...
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String roleName;
...
}
我用struts2这样打印我的播放器列表:
<table>
...
<s:iterator value="players" status="player">
<tr>
<td><s:property value="name"/></td>
<td><s:property value="price"/></td>
<td>
<s:iterator value="roles" status="role">
<s:property value="roleName"/>
</s:itetator>
</td>
</s:iterator>
...
</table>
我得到这个错误:
org.hibernate.LazyInitializationException - failed to lazily initialize a collection of role: no session or session was closed.
为什么我会收到此错误? JPA映射错了吗? 我尝试删除(仅作检查)角色内部迭代器,可以很好地看到玩家表,但显然没有我需要的角色。
注意:我尝试调试该应用程序,当我执行操作时,得到了List<Player>
,我展开了一个Player,然后看到带有Persistent Bag
变量的List<Roles>
,我尝试再次最大化,但我无法获取roleName
变量。
有人可以帮我解决问题吗? 提前致谢。
您正在尝试访问休眠结果,该结果在关闭休眠会话后被延迟初始化。 这就是为什么您会收到此错误。 通过fetchType将初始化类型更改为eager。
实际上,如果EAGER解决方案不起作用,我认为您唯一的选择是在获取所有数据时保持事务打开。 所以基本上:
2.-查询数据库。
3.-提取所有数据并将其移至仅包含所需数据的另一个数据结构(某些DTO)。 这也将成为角色。
4.-平仓交易。
5.-使用DTO结构生成响应
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.