簡體   English   中英

Java JPA-保留@OneToMany實體

[英]Java JPA - Persisting @OneToMany entity

大家好,

這些天,我遇到了持久對象@OneToMany的問題。 有問題的地方是我試圖創建兩個對象(一個是OneToMany,另一個是ManyToOne),我想持久保存@OneToMany一個,並自動將@ManyToOne持久保存到數據庫中。 所有表都設置為自動遞增,並且Collection在Komponenta.class的構造函數中初始化,我只放置了與該問題有關的部分 )。 這是我的代碼:

public class Komponenta implements Serializable {

@Id
private Integer idKom;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "idKom")
private Collection<Ima> imaCollection = new ArrayList<>();

}

public class Ima implements Serializable {

@Id
private Integer idIma;

@JoinColumn(name = "idKom", referencedColumnName = "idKom")
@ManyToOne
private Komponenta idKom;

}

    // runnable part
    Tools.em.getTransaction().begin();

    Komponenta k = new Komponenta();
    Ima i = new Ima();

    Collection<Ima> list = k.getImaCollection();
    list.add(i);
    k.setImaCollection(list);      

    i.setIdKom(k);

    Tools.em.persist(k);
    Tools.em.getTransaction().commit();

我從控制台輸出中得到了這類錯誤:

內部異常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“ idKom”不能為空錯誤代碼:1048

您可以將值設置為Komponenta實例的idKom

要么

讓ID自動生成

@Id
@GeneratedValue(strategy=GenerationType.AUTO)//Use strategy accoringly
private Integer idKom;

要使用MySQL AUTO_INCREMENT列,您應該使用IDENTITY策略:

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer idKom;

將MySQL與AUTO一起使用時,您將獲得以下內容:

@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer idKom;

實際上等於

@Id @GeneratedValue
private Integer idKom;

暫無
暫無

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

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