我在父子关系中使用javax.persistence.OneToMany关系。父ID为null,我已经阅读了Stackoverflow中的所有相关文章,但没有得到我所缺少的任何线索。 根据提供的序列,所有对应的PK都填充在父表和子表中,但是FK在子表中设置为null
家长班:
@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<DiversityTemplateAttribute> attributes = new ArrayList<>();
儿童班:
@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
解决这个问题很容易,您必须在子级中设置父级引用。
diversityTemplateAttribute.setDiversityTemplate(diversityTemplate);
或者,您可以将此逻辑放入方法中,DiversityTemplate该方法会自动将属性添加到列表+设置反向引用。
DiversityTemplate