@OneToMany映射JPA中的父ID为null

我在父子关系中使用javax.persistence.OneToMany关系。 父ID是空的,我已经阅读了Stackoverflow中的所有相关post,但没有得到任何线索我错过了什么。 根据提供的序列,所有相应的PK都在父表和子表中填充,但在子表中将FK设置为​​null

家长class:

@Entity @Table(name = "DIVERSITY_TEMPLATE") public class DiversityTemplate implements Serializable { private static final long serialVersionUID = 1L; @Id @SequenceGenerator(name = "DIVERSITY_TEMPLATE_ID", sequenceName = "DIVERSITY_TEMPLATE_ID", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DIVERSITY_TEMPLATE_ID") @Column(name = "DIVERSITY_TEMPLATE_ID") private Integer diversityTemplateId; @OneToMany(cascade = CascadeType.ALL, mappedBy = "diversityTemplate", fetch = FetchType.LAZY) private List attributes = new ArrayList(); 

儿童class:

 @Entity @Table(name = "DIVERSITY_TEMPLATE_ATTRIBUTE") @TypeName("DiversityTemplateAttribute") public class DiversityTemplateAttribute implements Serializable { private static final long serialVersionUID = 1L; @Id @SequenceGenerator(name = "DIVERSITY_TEMPLATE_ATTR_ID", sequenceName = "DIVERSITY_TEMPLATE_ATTR_ID", allocationSize = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "DIVERSITY_TEMPLATE_ATTR_ID") @Column(name = "DIVERSITY_TEMPLATE_ATTR_ID") private Integer diversityTemplateAttributeId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "DIVERSITY_TEMPLATE_ID", nullable=false, referencedColumnName = "DIVERSITY_TEMPLATE_ID") private DiversityTemplate diversityTemplate; 

服务类别:

  diversityTemplateRepository.save(diversityTemplate); 

示例json

 { "diversityTemplateId": 0, "attributes": [{ "diversityTemplateId": 0, "diversityTemplateAttributeId": 0, }, { "diversityTemplateId": 0, "diversityTemplateAttributeId": 0, }] } 

请建议。

通常,空FK列来自仅设置关系的一侧。

我想你有以下几点

 DiversityTemplate diversityTemplate = ... diversityTemplate.getAttributes().add(...) ... diversityTemplateRepository.save(diversityTemplate); 

这是错误的,因为DiversityTemplateAttribute不知道父母,只有父母知道他的孩子。

解决这个问题很简单,您必须在子项中设置父引用。

 diversityTemplateAttribute.setDiversityTemplate(diversityTemplate); 

或者,您可以将此逻辑放入DiversityTemplate的方法中,该方法会自动将属性添加到List +中以设置反向引用。