Java JSF JPA@OneToMany持久化中没有引用id

Java JSF JPA@OneToMany持久化中没有引用id,java,jpa,persistence,eclipselink,one-to-many,Java,Jpa,Persistence,Eclipselink,One To Many,我有两个JPA实体Xparent和Xchild,映射为注释@OneToMany、控制器类Xcontroller和JSF按钮“persist”。到目前为止,单击“持久化”可以正常工作,但是在Xchild记录的Xchild.xparent\u id字段中没有设置引用id 据我所知,有正确的注释,因为它使用控制器类中的List循环和persist(xparent)调用xparent对象生成记录 如何正确设置字段Xchild.parent\u id 当前Xparent关系结果: “id”“文本” “1”

我有两个JPA实体
Xparent
Xchild
,映射为注释
@OneToMany
、控制器类
Xcontroller
和JSF按钮“persist”。到目前为止,单击“持久化”可以正常工作,但是在
Xchild
记录的
Xchild.xparent\u id
字段中没有设置引用id

据我所知,有正确的注释,因为它使用控制器类中的
List
循环和
persist(xparent)
调用
xparent
对象生成记录

如何正确设置字段
Xchild.parent\u id

当前
Xparent
关系结果:
“id”“文本”
“1”“父级”

当前
Xchild
关系结果:
“id”“text”“xparent\u id”
“1”“儿童1”“”
“2”“儿童2”“”
“3”“儿童3”“”
4“儿童4”

预期的
Xchild
关系(id来自
Xparent

“id”“text”“xparent\u id
“1”“子1”“1
“2”“子2”“1
“3”“子3”“1
“4”“子项4”“1

源代码 Xparent.java

Xcontroller.java

包装控制器;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入javax.annotation.Resource;
导入javax.enterprise.context.RequestScope;
导入javax.inject.inject;
导入javax.inject.Named;
导入javax.persistence.EntityManagerFactory;
导入javax.persistence.PersistenceUnit;
导入javax.transaction.UserTransaction;
导入模型.Xchild;
导入模型.Xparent;
@命名
@请求范围
公共类Xcontroller实现可序列化
{
私有静态最终长serialVersionUID=8016446885968464239L;
@持久性单位
私人实体管理工厂emf;
@资源
私有用户事务;
@注入
私人Xparent Xparent;
公共Xparent getXparent()
{
返回xparent;
}
公共void setXparent(Xparent Xparent)
{
this.xparent=xparent;
}
公共字符串persist()
{
尝试
{
ut.begin();
List xchilds=new ArrayList();

对于(int i=1;i您需要设置关系的另一端。现在您只需将子项列表设置为父项,并且需要将父项设置为每个子项。将此添加到
for
循环中

xchild.setXparent(xparent);
package model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 * The persistent class for the xchild database table.
 * 
 */
@Entity
@Table(schema="public", name="xchild")
@NamedQuery(name="Xchild.findAll", query="SELECT i FROM Xchild i")
public class Xchild implements Serializable
{
    private static final long serialVersionUID = 1337852548952194022L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(unique=true, nullable=false)
    private Integer id;

    @Column(length=2147483647)
    private String text;

    //bi-directional many-to-one association to Xparent
    @ManyToOne
    @JoinColumn(name="xparent_id")
    private Xparent xparent;    

    public Xchild() { }

    public Integer getId()
    {
        return this.id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text = text;
    }

    public Xparent getXparent()
    {
        return xparent;
    }

    public void setXparent(Xparent xparent)
    {
        this.xparent = xparent;
    }
}
package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.transaction.UserTransaction;
import model.Xchild;
import model.Xparent;

@Named
@RequestScoped
public class Xcontroller implements Serializable
{
    private static final long serialVersionUID = 8016446885968464239L;

    @PersistenceUnit
    private EntityManagerFactory    emf;

    @Resource
    private UserTransaction         ut;

    @Inject
    private Xparent              xparent;

    public Xparent getXparent()
    {
        return xparent;
    }

    public void setXparent(Xparent xparent)
    {
        this.xparent = xparent;
    }

    public String persist()
    {
        try
        {
            ut.begin();

            List<Xchild> xchilds = new ArrayList<Xchild>();

            for (int i = 1; i <= 4; i++)
            {
                Xchild   xchild = new Xchild();
                xchild.setText("Child " + i);                
                xchilds.add(xchild);
            }

            xparent.setText("Parent");
            xparent.setXchilds(xchilds);

            emf.createEntityManager().persist(xparent);
            ut.commit();

            System.out.println("*** Run method: " + this.getClass().getSimpleName() + ".persist() ***");
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }

        return "/one2ManyPersistence.xhtml";
    }
}
xchild.setXparent(xparent);