database - 如何手动实现JPA关系OneToMany

标签 database jpa jpa-2.0 entity-relationship

我正在使用 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 文件,将数据转换为字符串,为我的根对象进行解码并保留该对象。

问题是,当我在字符串中发现费用关系时,这些值会插入到费用关系表中,但包含product_id的列始终为空

我已经定义了所有的 setter 和 getter。我如何强制它进行手动插入?谢谢

最佳答案

注意:我是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;
}

了解更多信息

关于database - 如何手动实现JPA关系OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085182/

相关文章:

sql - 从所有表和所有具有指定列名的数据库中查找列名 SQL Server

java - JPA 实例比预期的多

java - Spring Data Predicate - 在子集合中搜索属性

jpa - 我如何在 JPQL 中内部加入子查询

java - 如果我有实体管理器,如何获取 session 对象?

java - 如何获取选择不同的结果作为实体列表而不是元组

php - 警告 : mysql_select_db(): Access denied for user

database - 在 SSIS 中,我如何访问运行 OLE DB 命令的结果?

php - 在 MySQL 中连接具有多字段排序的两个表

java - 用于数据传输对象 (DTO) 投影的 Hibernate 二级缓存