Jsf 在数据表中显示onetomany关系

Jsf 在数据表中显示onetomany关系,jsf,primefaces,datatable,one-to-many,Jsf,Primefaces,Datatable,One To Many,我有两门课:电子邮件和数据。他们之间的关系是单一的。在数据表中,我想显示它包含的电子邮件列表。我该怎么做? 这些是我的实体的一部分: @Entity @Table(name = "EMAILS") public class Email implements Serializable { @Id @Column(name = "id") private String id; @Column(name = "extraction_Date") @Temp

我有两门课:电子邮件和数据。他们之间的关系是单一的。在数据表中,我想显示它包含的电子邮件列表。我该怎么做? 这些是我的实体的一部分:

  @Entity
@Table(name = "EMAILS")
public class Email implements Serializable { 
    @Id
    @Column(name = "id")
    private String id;
    @Column(name = "extraction_Date")
    @Temporal(TemporalType.TIMESTAMP)
    private Date date;
    @Size(max = 255)
    @Column(name = "email")
    private String email;
    @ManyToOne(cascade = CascadeType.PERSIST)
    private Data dataBase;

    public Email() {
        this.date = new Date();
        this.id = IdGenerator.IdGenerathorCall();

    }
    @Entity
@Table(name = "DATAS")
public class Data implements Serializable {

    @Id
    @Column(name = "id")
    private String id;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "creation")
    private Date date;
    @Column(name = "timeofextraction")
    private float grabduration;
    @Column(name = "keyword")
    private String keyword;
    @Column(name = "number")
    private int number;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "dataBase", fetch = FetchType.EAGER)
    private List<Email> emails;

    public Data() {
        super();
        this.date = new Date();
        this.id = IdGenerator.IdGenerathorCall();
    }
@实体
@表(name=“电子邮件”)
公共类电子邮件实现可序列化{
@身份证
@列(name=“id”)
私有字符串id;
@列(name=“提取日期”)
@时态(TemporalType.TIMESTAMP)
私人日期;
@尺寸(最大值=255)
@列(name=“email”)
私人字符串电子邮件;
@manytone(cascade=CascadeType.PERSIST)
私有数据数据库;
公共电子邮件(){
this.date=新日期();
this.id=IdGenerator.IDGeneratorCall();
}
@实体
@表(name=“DATAS”)
公共类数据实现可序列化{
@身份证
@列(name=“id”)
私有字符串id;
@时态(TemporalType.TIMESTAMP)
@列(name=“创建”)
私人日期;
@列(name=“提取时间”)
私人浮动期限;
@列(name=“关键字”)
私有字符串关键字;
@列(name=“number”)
私有整数;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“数据库”,fetch=FetchType.EAGER)
私人名单电子邮件;
公共数据(){
超级();
this.date=新日期();
this.id=IdGenerator.IDGeneratorCall();
}
我的页面dataList.xhtml如下所示:

 <p:dataTable value="#{dataMB.datas}" var="item" id="datas"  rowsPerPageTemplate="5,10,15,20,25,30" 
                                      paginator="true" rows="10" filteredValue="#{dataMB.filteredDatas}"
                                      selectionMode="single" rowKey="#{item.id}"
                                      selection="#{dataMB.selectedData}">
                        <p:ajax event="rowSelect" update=":form:dataView , :form:confirmDelete"/>
                        <p:column sortBy="#{item.date}" filterBy="#{item.date}">
                            <f:facet name="header">
                                <p:outputLabel value="Creation"/>
                            </f:facet>
                            <p:outputLabel value="#{item.date}">
                                <f:convertDateTime pattern="MM/dd/yyyy HH:mm:ss" />
                            </p:outputLabel>
                        </p:column>
                        <p:column sortBy="#{item.grabduration}" filterBy="#{item.grabduration}">
                            <f:facet name="header">
                                <h:outputText value="Time of execution"/>
                            </f:facet>
                            <h:outputText value="#{item.grabduration}"/>
                        </p:column>
                        <p:column sortBy="#{item.keyword}" filterBy="#{item.keyword}">
                            <f:facet name="header">
                                <h:outputText value="Keyword"/>
                            </f:facet>
                            <h:outputText value="#{item.keyword}"/>
                        </p:column>
                        <p:column sortBy="#{item.number}" filterBy="#{item.number}">
                            <f:facet name="header">
                                <h:outputText value="Number"/>
                            </f:facet>
                            <h:outputText value="#{item.number}"/>
                        </p:column>      
                          <p:column sortBy="#{item.emails}" filterBy="#{item.emails}">
                            <f:facet name="header">
                                <h:outputText value="Emails List"/>
                            </f:facet>
                            <h:outputText value="#{item.emails}"/>
                        </p:column>  
                    </p:dataTable> 


当我显示dataTable时,包含电子邮件列表的列为空,不显示任何内容。

您试图在单值组件中呈现列表

将“电子邮件”列更改为:

<p:column headerText="Emails List">
    <p:dataList  value="#{item.emails}" var="email" itemType="none">
        #{email.email}
    </p:dataList>
</p:column>

#{email.email}

除此之外,您还需要创建一个辅助方法,通过电子邮件进行排序和筛选。

查看primefaces子表