如何持久化子实体引用已持久化的父实体

时间:2017-11-05 00:54:19

标签: hibernate

我有一个家长&子实体。 使用@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;
    }

}

0 个答案:

没有答案