У меня есть отношения многие ко многим между двумя сущностями, называемыми событиями и художниками, оба аннотированы, чтобы быть загруженными ленивыми.Когда я загружаю исполнителя, я инициализирую его события, потому что сессия впоследствии будет закрыта с использованием
Hibernate.initialize(artist.getEvents());
. Тест в чистом Java работает нормально, и я могу получить доступ к событиям и его свойствам впоследствии.
Но на странице .xhtml, представляющей результат, я могу получить доступ только к свойствам художника и проверить, доступны ли какие-либо события, Artist - это базовый компонент, 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:
/artist.xhtml @48,63 value="#{event.title}": The class 'org.hibernate.collection.PersistentSet' does not have the property 'title'.
Сначала я подумал, что HibernateМетод initialize не работает вместе с 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
}