大家好,
我现在遇到了持久对象@OneToMany的问题。我遇到问题的地方在于我正在尝试创建两个对象(一个是OneToMany,另一个是ManyToOne),我想要保留@OneToMany,并自动将@ManyToOne持久存储到数据库中。 (所有表都设置为自动增量,并且在Komponenta.class的构造函数中初始化Collection,我只放置了与此问题相关的部分)。这是我的代码:
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'不能为null 错误代码:1048
答案 0 :(得分:0)
您可以将值设置为idKom
实例的Komponenta
。
或强>
让id自动生成
@Id
@GeneratedValue(strategy=GenerationType.AUTO)//Use strategy accoringly
private Integer idKom;
答案 1 :(得分:0)
要使用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;