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();
我从控制台输出中收到此类错误:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'idKom' cannot be null
Error Code: 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;
将 AUTO 与 MySQL 一起使用时会得到什么:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer idKom;
实际上相当于
@Id @GeneratedValue
private Integer idKom;
大家好,
这些天我遇到了持久化对象@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();
我从控制台输出中收到此类错误:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'idKom' cannot be null Error Code: 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;
将 AUTO 与 MySQL 一起使用时会得到什么:
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private Integer idKom;
实际上相当于
@Id @GeneratedValue
private Integer idKom;