簡體   English   中英

與JPA相關的實體持續存在

[英]JPA related entities persist

我為我的應用程序設計了一些表,在這些表中放置了以下內容:

product                            productversion
---                                ---
productId                          productVersionId
productVersionId (ref)             productId (ref)
name                               length
                                       height

我們之間有一對多的關系。 我只需要一些基本參數,這些參數可以更改和版本化參數,以便可以查看其歷史記錄。 現在...我在保留這些對象方面遇到問題。 我嘗試了多種方法,這是最古老的一種:

Product p = new Product();
p.name = "some name";
Productversion pv = new Productversion();
pv.length = 10;
pv.height = 20;
p.productversionId = pv;

但是,在嘗試保留該對象時,我收到了一個錯誤消息,即productId不能為null,它指向Productversion對象中的productId字段。 我怎樣才能做到這一點?

[更新]有關我的問題的更多信息:

public class Product implements Serializable {
    @JoinColumn(name = "productversionId", referencedColumnName = "productversionId")
    @ManyToOne(optional = true, cascade = CascadeType.PERSIST)
    private Productversion productversionId;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productId")
    private Collection<Productversion> productversionCollection;

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ProductId")
    private Integer productId;

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "Name")
    private String name = null;

    // well I believe construct and getter/setter not important now

第二個實體:

public class Productversion implements Serializable {
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "productversionId")
    private Collection<Productiondata> productiondataCollection;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "productversionId")
    private Integer productversionId;
    @Basic(optional = false)
    @NotNull
    @Column(name = "parameter")
    private float weight;

以及我創建新對象的方式(不知道如何執行此操作):

public Product getNewProduct() {
    if (newProduct == null) {
        this.newProduct = new Product();
        Productversion pv = new Productversion();
        pv.setProductId(newProduct);
        newProduct.setProductversionId(pv);
    }
    return newProduct;
}

我試圖持久化對象的方式:

public Boolean addEntry(Product productData) {
    Boolean status = false;
    DbConnector dc = new DbConnector();
    EntityManager em = dc.getEntityManager();

    try {
        EntityTransaction et = em.getTransaction();
        et.begin();
        em.persist(productData);
        et.commit();
        status = true;
    } finally {
        em.close();
    }
    return status;
}

好像您在Product對象的id字段的集合中丟失了一樣。

Product p = new Product(); 
p.id = 1;   <<<<<<-------------------
p.name = "some name";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM