[英]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.