我有一个家长&子实体。 使用@OneToMany将父映射到Child Child与Parent映射为@ManyToOne。
我想首先插入Parent,然后执行操作并创建childs列表并插入它们。 我在寻找是否有办法实现它。因此,我将尝试将批量插入应用于Childs,因为我将子持久性与Parent混合。 我希望获得每个子插入的每个数据库调用的性能,而不是所有子节点的单个数据库调用。
如果有办法实现请帮忙。 我尝试了几个选项,但他们失败了抱怨“无法将值NULL插入列,表CHILD;列不允许空值.INSERT失败。
请提出一些指示来克服这种情况。
@Entity
@Table(name = TABLE_NAME)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", length = 1, discriminatorType = DiscriminatorType.STRING)
@DiscriminatorOptions(force=true)
@AttributeOverride(name = UniqueIdentifierEntity.ID_NAME, column = @Column(name = ColumnName, length = 36))
public class Parent extends UniqueIdentifierEntity{
@OneToMany(mappedBy="parent",cascade=CascadeType.ALL)
private final Set<Child> childs = new HashSet<Child>();
//getter of childs
//Setter of childs
}
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = {Child.CHILD_ID_COLUMN }))
@AttributeOverride(name = UniqueIdentifierEntity.ID_NAME, column = @Column(name = Child.CHILD_ID_COLUMN, length = 36))
@BatchSize(size = 10)
public class Child extends UniqueIdentifierEntity {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "child_id")
private Parent parent;
public void setParent(Parent parent) {
this.parent = parent;
}
public Parent getParent() {
return parent;
}
}