Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何选择和显示自定义结果?_Hibernate_Jsf_Plsql - Fatal编程技术网

Hibernate 如何选择和显示自定义结果?

Hibernate 如何选择和显示自定义结果?,hibernate,jsf,plsql,Hibernate,Jsf,Plsql,下面是hibernate.reveng.xml中的映射表列表: 我在控制器类中尝试了以下方法: @ManagedBean @ViewScoped public class ProfileExperiences implements Serializable { //code...(not need for display here) public List getExpList() { session = sessionFactory

下面是hibernate.reveng.xml中的映射表列表:

我在控制器类中尝试了以下方法:

    @ManagedBean
    @ViewScoped
    public class ProfileExperiences implements Serializable {
      //code...(not need for display here)

      public List getExpList() {
      session = sessionFactory.openSession();
      transaction = session.beginTransaction();
      List<ProfileExpsView> lst = session.createQuery("Select p.profileId as profileId, pj.expId as expId,"
            + "p.fullName as fullName, cmp.cities.cityName as cityName,cmp.companyName as companyName,"
            + "pj.title as title,pj.dateFrom as dateFrom,pj.dateTo as dateTo "
            + "From Profiles p "
            + "join p.profilesJobExperienceses pj "
            + "join pj.companies cmp "
            + "where p.profileId=:p_profileId").setParameter("p_profileId",
            profiles.getProfileId()).list();
    transaction.commit();
    session.close();
    return lst;
    }
    //Code...(not need for display here)
  }
在我的JSF页面中,我使用以下内容:

<h:panelGrid>
            <h:dataTable id="expsList" value="#{profileExperiences.expList}" var="exp">
                <h:column>
                    <f:facet name="header">City</f:facet>
                    #{exp.cityName}
                </h:column>
                <h:column>
                    <f:facet name="hearde">Company</f:facet>
                    #{exp.companyName}
                </h:column>
                <h:column>
                    <f:facet name="header">Job Title</f:facet>
                    #{exp.title}
                </h:column>
                <h:column>
                    <f:facet name="header">Start Date</f:facet>
                    #{exp.dateFrom}
                </h:column>
                <h:column>
                    <f:facet name="header">End date</f:facet>
                    #{exp.dateTo}
                </h:column>
                <h:column>
                    <h:commandButton value="X" action="#{profileExperiences.deleteProExp(exp.expId)}">
                        <f:ajax execute="@form" render="@form"></f:ajax>
                    </h:commandButton>
                </h:column>
            </h:dataTable>
        </h:panelGrid>

但是没有显示任何内容,有什么问题吗?

您可以返回列表并使用索引引用对象

 List<Object[]> lst = session.createQuery("Select cmp.cities.cityName as cityName,cmp.companyName as companyName,"
        + "pj.title as title,pj.dateFrom as dateFrom,pj.dateTo as dateTo "
        + "From Profiles p "
        + "join p.profilesJobExperienceses pj "
        + "join pj.companies cmp "
        + "where p.profileId=:p_profileId").setParameter("p_profileId",
        profiles.getProfileId()).list();
在JSF页面中,您可以像{item[0]}一样引用


如果查询语句以任何一种方式失败,那么问题显然与Hibernate和/或关联的后端数据库有关。在这种情况下,JSF纯粹是一个多余的主题。您正在从方法getExpList返回一个非泛型java.util.List。如果您返回的是元组行列表,而不是完全限定映射实体的对象列表,那么有几种方法可以做到这一点。简而言之,您可以返回一个列表,或者您可以使用构造函数查询将结果列表映射到一类对象,从而返回一个列表。@Tiny谢谢您的评论,列表也没有将结果带入我的jsf页面,我不知道到底是什么问题,我会尝试下面的答案,我认为这是更好的情况下,我需要在不同的页面和控制器类。我提到了这些结果列表策略列表,列表和列表纯粹基于JPA。在纯内核原生Hibernate的环境中,事情可能会有所不同。@BalusC非常感谢您的编辑和评论,我是新来的,我将在下一次尝试,但是问题已经解决了。
<h:panelGrid>
            <h:dataTable id="expsList" value="#{profileExperiences.expList}" var="exp">
                <h:column>
                    <f:facet name="header">City</f:facet>
                    #{exp.cityName}
                </h:column>
                <h:column>
                    <f:facet name="hearde">Company</f:facet>
                    #{exp.companyName}
                </h:column>
                <h:column>
                    <f:facet name="header">Job Title</f:facet>
                    #{exp.title}
                </h:column>
                <h:column>
                    <f:facet name="header">Start Date</f:facet>
                    #{exp.dateFrom}
                </h:column>
                <h:column>
                    <f:facet name="header">End date</f:facet>
                    #{exp.dateTo}
                </h:column>
                <h:column>
                    <h:commandButton value="X" action="#{profileExperiences.deleteProExp(exp.expId)}">
                        <f:ajax execute="@form" render="@form"></f:ajax>
                    </h:commandButton>
                </h:column>
            </h:dataTable>
        </h:panelGrid>
 List<Object[]> lst = session.createQuery("Select cmp.cities.cityName as cityName,cmp.companyName as companyName,"
        + "pj.title as title,pj.dateFrom as dateFrom,pj.dateTo as dateTo "
        + "From Profiles p "
        + "join p.profilesJobExperienceses pj "
        + "join pj.companies cmp "
        + "where p.profileId=:p_profileId").setParameter("p_profileId",
        profiles.getProfileId()).list();
<h:panelGrid>
        <h:dataTable id="expsList" value="#{profileExperiences.expList}" var="exp">
            <h:column>
                <f:facet name="header">City</f:facet>
                #{exp[0]}
            </h:column>
            <h:column>
                <f:facet name="hearde">Company</f:facet>
                 #{exp[1]}
            </h:column>
            <h:column>
                <f:facet name="header">Job Title</f:facet>
                #{exp[2]}
            </h:column>
            <h:column>
                <f:facet name="header">Start Date</f:facet>
                #{exp[3]}
            </h:column>
            <h:column>
                <f:facet name="header">End date</f:facet>
                #{exp[4]}
            </h:column>
            <h:column>
                <h:commandButton value="X" action="#{profileExperiences.deleteProExp(exp.expId)}">
                    <f:ajax execute="@form" render="@form"></f:ajax>
                </h:commandButton>
            </h:column>
        </h:dataTable>
    </h:panelGrid>