JPA自动生成的密钥未反映在子表的外键中

时间:2016-10-16 23:58:40

标签: jpa spring-boot hsqldb

父表:

@Table(name="parent_table_t")
public class ParentTable implements Serializable {

@Id
@Column(name="contact_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer contactId;
---------
---------
@OneToOne (cascade = CascadeType.ALL, mappedBy = "parentTable")
private ChildTable childTable;
}

子表:

@Table(name="child_table_t")
public class ChildTable implements Serializable {

@Id
@Column(name="child_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer childId;

@Column(name="contact_id")
private Integer contactId;

@JoinColumn(name="contact_id", referencedColumnName = "contact_id", insertable=false, updatable=false)
@OneToOne(cascade = CascadeType.ALL)
private ParentTable parentTable;
}

我的要求是在parent_table_t中生成contact_id时,应该在保存时将其复制到child_table_t的contact_id中。

当我在父表实体上调用saveAndFlush / save时,它是: 生成Parent-> contact_id的自动增量。 但是Child_table_t - > contact_id始终为null。 有人可以帮忙吗。 我正在使用带有spring-boot和JPA的in-memorty hsqldb。

1 个答案:

答案 0 :(得分:0)

您使用insertable = false,updatable = false标记了@JoinColumn的关系,可能是因为您还有一个整数映射列。不幸的是,这些设置阻止了JPA使用关系中的值设置它,而是强制使用contactId属性中的值设置列。

将insertable = false,updatable = false放在@Column上。