问题有点尴尬。我有一个带有评论的主题(论坛上的一些谈话),每个评论可以有多个审核标志。
使用 JBoss,我使用 RestEasy 发出 RESTful Web 服务请求。Jackson 技术将我的主题转换为 JSON。
我查找主题的请求是:
Select s from Subject s JOIN FETCH s.comments WHERE s.id = :id
问题是每个评论现在都有一个PersistentBag
而不是一个列表,并且 JBoss 抛出:
org.codehaus.jackson.map.JsonMappingException:
failed to lazily initialize a collection of role: io.robusta.fora.domain.Comment.flags, no session or session was closed (through reference chain:
java.util.ArrayList[0]
->io.robusta.fora.domain.Subject["comments"]
->org.hibernate.collection.internal.PersistentBag[0]
->io.robusta.fora.domain.Comment["flags"])
事实上,我只是想在这个特定的请求中忽略这些标志。所以我所做的很糟糕但有效:
for (Comment c : comments ){c.setFlags(new ArrayList<Flag>());}
但是为了避免这个可怕的循环,有没有办法在 JPQL 查询中强制这个空值?