Java JSF JPA@OneToMany持久化中没有引用id
我有两个JPA实体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”
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);