Как получить список субъектов - PullRequest
0 голосов
/ 01 апреля 2012

org.hibernate.*

@Entity
@Table(name="hs")
public class HostSite {
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO)  
    private Integer id;

    @OneToMany(mappedBy="hostSite")
    private List<HostSiteSection> sectionList;

Раздел узла хоста

@Entity
@Table(name="hsst")
public class HostSiteSection {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="hsid")
    private HostSite hostSite;

Контроллер

screenObject.setSectionList(hostSite.getSectionList());

JSP

<c:if test="${screenObject!=null && screenObject.getSectionList()!=null}">
    <c:forEach items="${screenObject.getSectionList()}" var="section">
        <tr>
             <td><a href="../hostSiteSection/${section.id}" target="_blank">${section.id}</a></td>
             <td><a href="../hostSiteSection/${section.id}" target="_blank">${section.name}</a></td>        
             <td>${section.order}</td>
        </tr>
    </c:forEach>
</c:if>

Где он разваливается?В контроллере или jsp?В чем причина?Я пробовал и нетерпеливый и ленивый.

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Проблема в том, что ваш сеанс гибернации был закрыт в тот момент, когда ваш код пытается получить список.Это также может произойти, если ваша сущность больше не привязана к сеансу, потому что она закрыта и открыта снова.

Простое сопоставление списка с нетерпением может исправить это, но это не лучшее решение.Использование интенсивного извлечения может привести к серьезным проблемам с производительностью в режиме гибернации.

Лучшее решение состоит в том, чтобы убедиться, что сеанс гибернации открыт и ваша сущность присоединена к нему во время его использования.Вероятно, это проще всего сделать в вашей ситуации, подключив фильтр сервлета для шаблона open-session-in-view .Другие возможные подходы к решению проблемы также описаны в разделе документации hibernate по инициализации выборки производительности .

0 голосов
/ 01 апреля 2012

Вам нужно с нетерпением загрузить коллекцию sectionList внутри HostSite.

@Entity
@Table(name="hs")
public class HostSite {
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO)  
    private Integer id;

    @OneToMany(mappedBy="hostSite",fetch=FetchType.EAGER)
    private List<HostSiteSection> sectionList;

Документы по HQL API ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...