【发布时间】:2010-08-17 13:41:10
【问题描述】:
我正在尝试在 2 个实体之间建立零对一的关系。也就是说,Parent 可以在没有关联的 Child 实体的情况下保存,也可以与关联的 Child 一起保存。 以下是 2 个实体类...
员工(父母)
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="EMP_NAME")
private String name;
@PrimaryKeyJoinColumn
@OneToOne(cascade = {CascadeType.ALL})
private EmployeeInfo info;
@Column(name="EMP_ENUM")
private Integer enumId;
员工信息(儿童)
public class EmployeeInfo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name="EMPLOYEE_EMAIL")
private String email;
在 MySql DB 中,唯一的 Parent (Employee) 表的这种关系和 id 列设置为 AUTO INCREMENT,问题是在保存 Parent->Child 对象图时,我得到以下异常
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [insert into EMP_INFO
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
我尝试在DB中将Child Table的Id属性设置为AUTO INCREMENT,这样的Parent->Child对象图的持久化是成功的。 但是,问题描述了here 表面,因为我有一个场景,我想在没有关联 EmpInfo 对象的情况下保存父(员工)对象,并且 因此不想在孩子的 id 上使用 AUTO INCREMENT列。
一种解决方案可能是不使用 PrimaryKeyJoinColumn,而是使用特定的 JoinColumn,但这会在我现有的表中添加一个不必要的列。
有人遇到过这样的问题吗?如果是,任何指针都会很有帮助。
【问题讨论】:
标签: java hibernate orm jpa shared-primary-key