Jsf 将对数据库的请求增加到Hibernate3

Jsf 将对数据库的请求增加到Hibernate3,jsf,Jsf,只是检查了所有的帖子和主题,并没有真正找到解决方案,但问题出在这里-一个名为TestResult.java的主要类有两个集合List和List,它们都设置为Lazy: @ViewScoped @Entity @NamedQueries({ @NamedQuery(name="TestResult.getTestResults",query="FROM TestResult tr order by DateTaken desc"), @NamedQuery(name="TestResult.get

只是检查了所有的帖子和主题,并没有真正找到解决方案,但问题出在这里-一个名为TestResult.java的主要类有两个集合List和List,它们都设置为Lazy:

@ViewScoped
@Entity
@NamedQueries({
@NamedQuery(name="TestResult.getTestResults",query="FROM TestResult tr order by DateTaken desc"),
@NamedQuery(name="TestResult.getTestStatistic",query="Select testStatistic FROM TestResult tr where tr.recId = :recId"),
@NamedQuery(name="TestResult.getQuestions",query="Select questionsList FROM TestResult tr where tr.recId = :recId ")

})
@Table(name="TestResult")
public class TestResult implements Serializable {

private transient static final long serialVersionUID = 1L;

transient static final private String pass = "PASSED";
transient static final private String fail = "FAILED";

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int recId;
private String Username;
private String SavedTestName;
private Date DateTaken;
private int TestDuration;
private int TotalAsnwers;
private int MissedAsnwers;
private int CorrectAsnwers;
private int IncorrectAsnwers;
private int Score;
private String Status;
@OneToMany(fetch=FetchType.LAZY)
private List<UserQuestion> questionsList = new ArrayList<UserQuestion>();
@OneToMany(fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
@Fetch(FetchMode.SELECT)
private List<TestStatistic> testStatistic = new ArrayList<TestStatistic>();

getters and setters are here ... 
xhtml文件如下所示:

    <p:layoutUnit position="center">  
    <h:form>  
        <p:dataTable id="datatable" value="#{tableView.listResults}" var="results" paginator="true" rows="20" 
            paginatorTemplate=
                "{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            rowStyleClass="#{results.status == 'FAILED' ? 'failed-test' : 'passed-test'}" rowsPerPageTemplate="10,5">
        <p:column>
            <f:facet name="header">Action</f:facet>
            ajax="false" update="panel,display"/>
        <p:commandButton value="Review test" ajax="false" immediate="true"/>
        </p:column>
        <p:column>
            <f:facet name="header">Username</f:facet>
            <p:outputLabel value="#{results.username}"/>
        </p:column>         
        <p:column>
            <f:facet name="header">Test name</f:facet>
            <p:outputLabel value="#{results.savedTestName}"/>
        </p:column>
        <p:column>
            <f:facet name="header">Date taken</f:facet>
            <p:outputLabel value="#{results.dateTaken}"/>
        </p:column>
        <p:column>
            <f:facet name="header">Test name</f:facet>
            <p:outputLabel value="#{results.testName}"/>
        </p:column>         
        <p:column>
            <f:facet name="header">Test duration</f:facet>
            <p:outputLabel value="#{results.testDuration} min"/>
        </p:column>         
        <p:column>
            <f:facet name="header">Total / Correct / Incorrect / Missed</f:facet>
            <p:outputLabel value="#{results.totalAsnwers} / #{results.correctAsnwers} / 
                #{results.incorrectAsnwers} / #{results.missedAsnwers}"/>
        </p:column> 
        <p:column>
            <f:facet name="header">Score</f:facet>
            <p:outputLabel value="#{results.score} %"/>
        </p:column> 
        <p:column>
            <f:facet name="header">Status</f:facet>
            <p:outputLabel value="#{results.status}"/>
        </p:column> 
        </p:dataTable>

行动
ajax=“false”update=“面板,显示”/>
用户名
测试名称
拍摄日期
测试名称
测试持续时间
总计/正确/不正确/遗漏
分数
地位
在hibernate初始化我在控制台中看到的所有内容之后: i、 e.它执行一个查询两次, 但是,如果我单击p:dataTable的分页控件将其从5更改为10,例如,我会在控制台中看到:

我已经检查了所有可能的问题来源,但仍然找不到解决方案。这不应该是一个与控制有关的问题吗

这里是一个完整的查询输出,相同的查询运行18次

Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 Hibernate:选择testresult0.recId作为recId6,testresult0.CorrectAsnwers作为CorrectA2.6,testresult0.Date作为DateTaken6,testresult0.IncorrectAsnwers作为Incorrect4.6,testresult0.MissedAsnwers作为Missed5.6,testresult0.SavedTestRestName作为SavedTes6.6,testresult0.Score作为Score6,testresult0.Status作为Status6,testresult0.TestDuration为TestDura9.6,testresult0.TestName为TestName6,testresult0.TopicName为TopicName6,testresult0.TotalAsnwers为TotalAs12.6,testresult0.ToughLevel为Toughne13.6,testresult0.Username为Username6,从testresult0.testresult0 休眠:选择testresult0\uUd作为recId6\uUd,testresult0\uUd作为CorrectA2\uU6\uUb,testresult0\uUd.DateTake作为DateTaken6\uUt
    @PostConstruct
public void loadListResults() {

    sessionFactory = HibernateUtil.getSessionFactory();
    session = sessionFactory.openSession();
    session.beginTransaction();

    Query query = session.getNamedQuery("TestResult.getTestResults");
    listResults = query.list();

    session.getTransaction().commit();
    session.close();

}
    <p:layoutUnit position="center">  
    <h:form>  
        <p:dataTable id="datatable" value="#{tableView.listResults}" var="results" paginator="true" rows="20" 
            paginatorTemplate=
                "{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
            rowStyleClass="#{results.status == 'FAILED' ? 'failed-test' : 'passed-test'}" rowsPerPageTemplate="10,5">
        <p:column>
            <f:facet name="header">Action</f:facet>
            ajax="false" update="panel,display"/>
        <p:commandButton value="Review test" ajax="false" immediate="true"/>
        </p:column>
        <p:column>
            <f:facet name="header">Username</f:facet>
            <p:outputLabel value="#{results.username}"/>
        </p:column>         
        <p:column>
            <f:facet name="header">Test name</f:facet>
            <p:outputLabel value="#{results.savedTestName}"/>
        </p:column>
        <p:column>
            <f:facet name="header">Date taken</f:facet>
            <p:outputLabel value="#{results.dateTaken}"/>
        </p:column>
        <p:column>
            <f:facet name="header">Test name</f:facet>
            <p:outputLabel value="#{results.testName}"/>
        </p:column>         
        <p:column>
            <f:facet name="header">Test duration</f:facet>
            <p:outputLabel value="#{results.testDuration} min"/>
        </p:column>         
        <p:column>
            <f:facet name="header">Total / Correct / Incorrect / Missed</f:facet>
            <p:outputLabel value="#{results.totalAsnwers} / #{results.correctAsnwers} / 
                #{results.incorrectAsnwers} / #{results.missedAsnwers}"/>
        </p:column> 
        <p:column>
            <f:facet name="header">Score</f:facet>
            <p:outputLabel value="#{results.score} %"/>
        </p:column> 
        <p:column>
            <f:facet name="header">Status</f:facet>
            <p:outputLabel value="#{results.status}"/>
        </p:column> 
        </p:dataTable>
@ManagedBean
@ViewScoped
public class Bean {
    private List<TestResult> testResults;
    @PostConstruct
    public void init() {
        //here you will load the data for your testResults variable
    }
    public List<TestResult> getTestResults() {
         //clean getter
         return this.testResults;
    }
}
@ManagedBean
@ViewScoped
public class TableView {
    private boolean showChart = false;
    private boolean _isFiltered;
    private List<TestResult> listResults = null;

    @PostConstruct
    public void init() {
        sessionFactory = HibernateUtil.getSessionFactory();
        session = sessionFactory.openSession();
        session.beginTransaction();
        Query query = session.getNamedQuery("TestResult.getTestResults");
        listResults = query.list();
        session.getTransaction().commit();
        session.close();
    }

    public List<TestResult> getListResults() {
        return this.listResults;
    }
}