3

「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 には、イベントに戻る双方向の関係があります。それが原因でしょうか?

私はそれがPersistentSetであることに少し疑問を抱いています.今では通常の「Java」セットに変換されていると思っていましたが、そうではないかもしれません.

ありがとう

4

1 に答える 1

9

を繰り返し処理することはできませんSet。これは、現時点では JSF の制限です。JSF 2.2 ではそれが可能になります。

そうは言っても、自分で変換することも、OmniFaces #{of:setToList}EL functionを使用することもできます。車輪を再発明する必要はありません。:)

BalusCによるこの回答も参照してください。


Hibernate が を返すという事実に関してはPersistentSet、それが機能する方法です。Hibernate には の独自の実装がSetあるため、遅延読み込みなどの機能を実装できます。

于 2012-10-28T14:39:18.363 に答える