[英]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.