2012-04-10 78 views
2

我正在使用JPA批註,並且當我有關係OneToMany - ManyToOne,當我在ManyToOne中看到我的實體時,joinColumn始終爲null值。如何手動實現JPA關係OneToMany

接下來,我會告訴我的例子,我有產品

@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文件,將數據轉換爲字符串,爲我的根對象取消組裝,並堅持這個對象。

問題是,當我發現在我的字符串的充電關係,值被插在充電關係表柱與PRODUCT_ID總是空

我已經定義了所有的setter和getters。我如何強制這個手動插入?謝謝

回答

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; 
} 

更多信息

+0

我嘗試,但沒有奏效。我做了一個遞歸的方法來建立所有的關係。現在它工作:) – 2012-04-13 07:46:22

2

請注意,JPA提供程序在將其保存到數據庫時反映了多對一關係的狀態。

但是,JAXB僅在XML解組過程中填充一對多一側,因此需要在解組後編譯多對一側。