var是集合,而不是项目

时间:2012-10-28 12:36:58

标签: hibernate primefaces

我循环浏览了一系列'RSVP'对象并打印出每个'Name'属性的值,如下所示

<p:dataTable id="rsvpDataTable" var="rsvp" value="#{eventController.event.rsvps}"...
   <h:outputText value="#{rsvp.name}" />
</p:dataTable>

但我得到错误:类'org.hibernate.collection.internal.PersistentSet'没有属性'name'

如果相反,我打印出'rsvp.class.name'来查看它是什么类型,它确实是一个PersistentSet。

但为什么呢?它应该是集合中的单个RSVP实例。

如果我调试代码并在getRsvps()处停止,我可以看到它返回一个包含我的RSVP对象的PersistentSet。 RSVP与Event有双向关系。这会导致这个吗?

我有点怀疑它实际上是PersistentSet,我原本以为它会被转换回现在正常的'Java'设置,但可能不会。

由于

1 个答案:

答案 0 :(得分:9)

你不能迭代Set,而且现在是JSF限制。 JSF 2.2将能够做到这一点。

那就是说,你可以自己转换它,或者我会做什么,你可以使用OmniFaces #{of:setToList} EL function。你不必重新发明轮子。 :)

另请参阅BalusC的this answer


关于Hibernate返回PersistentSet的事实,这就是它的工作方式。 Hibernate拥有它自己的Set实现,因此它可以实现Lazy-Loading等功能。