2

私は JPA アノテーションを使用しています。関係 OneToMany - ManyToOne がある場合、ManyToOne で自分のエンティティを見ると、joinColumn は常に null 値になります。

次に、私の例を示します。私はProductを持っています:

  @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 の列は常に nullです。

すべてのセッターとゲッターを定義しました。これを強制的に手動で挿入するにはどうすればよいですか? ありがとう

4

2 に答える 2

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;

}

料金関係

注釈は、@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;
}

詳細については

于 2012-04-10T09:59:19.933 に答える
2

JPA プロバイダーは、データベースに保存するときに、関係の多対 1 側の状態を反映することに注意してください。

ただし、JAXB は XML アンマーシャリング中に 1 対多側にのみデータを入力するため、アンマーシャリング後に手動で多対 1 側にデータを入力する必要があります。

于 2012-04-10T08:25:02.240 に答える