我在稱爲事件和藝術家的兩個實體之間存在多對多關係,兩者都註釋爲延遲加載。當我打開一個藝術家,我初始化它的事件,因爲會議將隨後使用無法從JSF2訪問延遲註釋但已初始化的hibernate集合
Hibernate.initialize(artist.getEvents());
純Java編寫的測試工作正常,我以後可以訪問該事件和它的屬性被關閉。
但是在呈現結果的.xhtml頁面中,我只能訪問藝術家的屬性並測試是否有可用的事件,Artist是輔助bean,getData()返回Artist,下面的行仍然有效:
<h:outputText value="No events available" rendered="#{empty artist.data.events}"/>
但是,當我想用
<h:dataTable value="#{artist.data.events}" var="event" rendered="#{not empty artist.data.events}">
<h:column>
<h:outputText value="#{event.title}"/>
</h:column>
</h:dataTable>
我得到的followig例外訪問一個DataTable的事件的性質:
/artist.xhtml @48,63 value="#{event.title}": The class 'org.hibernate.collection.PersistentSet' does not have the property 'title'.
我的第一個想法是,Hibernate的初始化方法不能與JSF2一起工作,但是當我將FetchType從LAZY更改爲EAGER時,我最終得到了相同的結果。
Event類看起來像這樣,爲了簡便起見,我只包括了相關的title屬性的部分:
@Entity()
@Table(name="Events")
@SequenceGenerator(name="events_id", sequenceName="event_seq", initialValue=1, allocationSize=1)
public class EventData implements Serializable {
private String title;
// other private variables
public EventData() {}
public EventData(String title, ...) {
this.title = title;
// ...
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
// other setters/getters, equals/getHashCode overrides
}
你可以發佈類「事件」的代碼? – pakore 2010-07-11 11:13:52