中迭代java.util.Set.类org.eclipse.persistence.indir



我在MySQL数据库中有三个表

  • sub_category
  • 产品

这些表之间的关系是直观的——按它们出现的顺序一对多。


我从MySQL数据库中得到一个List<SubCategory>,其中每个子类别都有一个java.util.Set<Product>,这很明显。

我在<p:dataGrid>中迭代List<SubCategory>,如下所示。

<p:dataGrid id="dataGrid" rows="4" first="0" columns="1" value="#{productDetailsManagedBean}" var="row" rowIndexVar="rowIndex" paginator="true" paginatorAlwaysVisible="false" pageLinks="10" lazy="true" rowsPerPageTemplate="1,2,3">
        <h:panelGrid columns="1" style="width:100%">
            <h:outputText value="#{row.subCatId}"/>
            <p:carousel id="carousel" value="#{row.productSet}" var="prodRow" numVisible="4" headerText="#{row.subCatName}">
                <h:outputText value="#{prodRow.prodId}"/>
            </p:carousel>
        </h:panelGrid>
</p:dataGrid>

<p:carousel>的value属性不起作用。上面只写着{IndirectSet: not instantiated}。因此,使用EL(如#{prodRow.prodId})访问<h:outputText>所见的任何产品都会抛出一个异常,如

javax.el.PropertyNotFoundException: The class 'org.eclipse.persistence.indirection.IndirectSet' does not have the property 'prodId'

当我改变,

<h:outputText value="#{prodRow.prodId}"/>

<h:outputText value="#{row.productSet.size()}"/>

它正确显示了row.productSet的大小(它不是空的,大小与List<SubCategory>中每个子类别的行数完全相同)。Set精确初始化)。

为什么在访问Product的属性(如#{prodRow.prodId})时会抛出异常?

如何解决这个问题?

这里已经解释得很清楚了,但在这种特殊情况下,我无法解决同样的问题。

我正在使用EclipseLink 2.3.2提供的JPA

我曾尝试将java.util.Set更改为java.util.List,但这样做需要对应用程序进行太多更改,这是一种痛苦。

相反,我使用它的toArray()方法把java.util.Set变成了一个数组,它工作了。

<p:carousel id="carousel" value="#{row.productSet.toArray()}" var="prodRow" numVisible="6" headerText="#{row.subCatName}">
    <!--<h:outputText value="#{prodRow.prodId}"/>-->
    <p:graphicImage library="fileUpload" name="product_image/medium/#{prodRow.productImageSet.toArray()[0].prodImage}" alt="#{prodRow.prodName}" height="140" width="135"/>
</p:carousel>

我已经用<p:graphicImage>代替了<h:outputText>,以满足在<p:graphicImage>上显示图像的具体要求。

我不知道问题是否与JPA提供程序EclipseLink本身或java.util.Set有关。如果有人知道,请说明。


编辑:

我现在已经改变了每一个逆(或映射)字段从java.util.Setjava.util.List在我的应用程序无处不在,它工作得很好。没有必要使用.toArray(),因为必须使用java.util.Set

相关内容

  • 没有找到相关文章

最新更新