Java 动态jpql返回集合,但如何将其分配给datatable?

Java 动态jpql返回集合,但如何将其分配给datatable?,java,jsf,jakarta-ee,jpa,primefaces,Java,Jsf,Jakarta Ee,Jpa,Primefaces,我有一个动态jpql,如下所示: public Collection getOrderReportByUserName(String userName, Integer scripID, String orderStatus, String orderType) { String strQuery = null; Collection<TradeStock> ts = em.createQuery("Select t from TradeSto

我有一个动态jpql,如下所示:

public Collection getOrderReportByUserName(String userName, Integer scripID, String orderStatus, String orderType) 
{     

    String strQuery = null;

        Collection<TradeStock> ts = em.createQuery("Select t from TradeStock t where t.userName.userName = :userName").setParameter("userName",userName).getResultList();
        if(ts.isEmpty())
        {
            strQuery = "Select o from OrderStock o where o.userName.userName = :userName ";
        }
        else
        {
            strQuery = "Select o,t from OrderStock o,TradeStock t where o.userName.userName = :userName and t.userName.userName = :userName";
        }   

    Collection c = em.createQuery(strQuery).setParameter("userName",userName).getResultList();
    return c;  
}
xhtml:

<p:dataTable id="dt" var="order" widgetVar="scripTab" 
                     emptyMessage="No scrip found with given criteria" binding="#{stockOrderBean.dt}" 
                     value="#{stockOrderBean. collOrder}"
                 >

        <p:column>

            <f:facet name="header">
                Scrip Symbol
            </f:facet>
            <h:outputText value="#{order.get(0)}"/> ?? how to assign it?
        </p:column>......

纸条符号
?? 如何分配?
......
在这里,当我调试它时,我发现“c”包含返回的集合,但是现在我如何将它分配给datatable?返回的集合包含两个表的对象-“tradeStock”和“orderStock”-那么如何在primefaces数据表中使用它呢

编辑: 我想显示来自两个不同类的字段-一些来自OrderStock的字段和一些来自TradeStock的字段,它们由名为“OrderID”的公共字段连接。。这可能吗??如果没有,那么还有什么替代方案呢?

注意:我建议阅读一些关于Java开发的基础知识。您的代码中存在一些主要缺陷

但是关于你的具体问题:

如果在名为
StockOrderBean
的bean中有一个方法
getOrderReport()
,则必须在视图中引用该方法:

#{stockOrderBean.orderReport}

因此,您的表定义应该如下所示:

<p:dataTable value="#{stockOrderBean.orderReport}" var="order"..>

但我想显示来自两个不同类的字段-一些来自OrderStock的字段和一些来自TradeStock的字段,它们由名为“OrderID”的公共字段连接。。这可能吗??如果没有,那么什么是替代解决方案??它们有一个公共超类还是一个是另一个的超类?不,它们没有公共超类。OrderStock是TradeStock的超类..那么您应该将您的arraylist键入arraylist,并可以在您的dataTable中引用超类的所有属性。谢谢。但是您可以在我的问题中参考我的jpql查询吗。如果同时返回o和t,则您的答案是正确的。但如果只返回o(OrderStock),该怎么办?(OrderID是TradeStock中的引用列)
<p:dataTable value="#{stockOrderBean.orderReport}" var="order"..>
 <h:outputText value="#{order.date}"/>