我正在使用JPA注释,当我有关系OneToMany - ManyToOne时,当我在ManyToOne中看到我的实体时,joinColumn总是具有空值。
接下来我将展示我的示例,我有产品:
@Entity
@Table(name = "PC_PRODUCT")
public class Product extends LaunchEntity {
private static final long serialVersionUID = 1L;
@XmlElement(name = "Product_Name", required = true)
protected String productName;
@XmlElement(name = "Product_Description")
protected String productDescription;
@XmlElement(name = "Product_To_Charge")
@OneToMany(mappedBy = "product", cascade=CascadeType.MERGE)
protected List<ChargeRelation> productToCharge;
而且,这是我的ChargeRelation类:
@Entity
@Table(name="PC_CHARGE_RELATION")
public class ChargeRelation
extends RelationEntity
{
private static final long serialVersionUID = 1L;
@XmlElement(name = "Charge", required = true)
@OneToOne(cascade = CascadeType.MERGE)
protected Charge charge;
@XmlTransient
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="PRODUCT_ID")
protected Product product;
我正在读取一个xml文件,为字符串转换数据,为我的根对象制作unmarshall并保留此对象。
问题是当我在字符串中找到电荷关系时,值会插入电荷关系表,但带有product_id的列始终为空。< / p>
我已经定义了所有的setter和getter。我怎么强迫这个来手动插入?感谢
答案 0 :(得分:2)
请注意,JPA提供程序在将数据保存到数据库时反映了多对一关系的状态。
但是,JAXB仅在XML解组期间填充一对多的一面,因此您需要在解组后手动填充多对一的一面。
答案 1 :(得分:2)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB 2 (JSR-222)专家组的成员。
EclipseLink JAXB(MOXy)有一个名为@XmlInverseReference
的扩展,允许您映射后向指针。
<强>产品强>
@Entity
@Table(name = "PC_PRODUCT")
public class Product extends LaunchEntity {
@XmlElement(name = "Product_To_Charge")
@OneToMany(mappedBy = "product", cascade=CascadeType.MERGE)
protected List<ChargeRelation> productToCharge;
}
<强> ChargeRelation 强>
@XmlInverseReference
注释用于您之前拥有@XmlTransient
的地方。在编组操作期间,@XmlInverseReference
的行为类似于@XmlTransient
,并且会在解组操作期间填充后向指针。
@Entity
@Table(name="PC_CHARGE_RELATION")
public class ChargeRelation extends RelationEntity {
@XmlInverseReference(mappedBy = "productToCharge")
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="PRODUCT_ID")
protected Product product;
}
了解更多信息