@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 +中以设置反向引用。
- 如何使用Hibernate动态创建数据库中的表?
- 为什么Hibernate STRING无法解决?
- 是否有可能获得Hibernate sqlRestriction的连接表的SQL别名?
- Spring boot + Hibernate
- Hibernate配置错误(找不到元素’hibernate-configuration’的声明)
- java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax / persistence / Index;
- 如何在Hibernate中用TableGenerator替换已弃用的MultipleHiLoPerTableGenerator
- Hibernate使用嵌入的ElementCollection抛出ConcurrentModificationException
- 在Hibernate限制中对限制’等于id’区分大小写