减少插入时运行的JPA查询数

时间:2015-11-19 19:37:21

标签: java hibernate jpa-2.0

我有单向,一对多的父/子关系。 在我的测试用例中,我有1个父项,有2个孩子,通过级联插入插入。

查看运行的查询,我为每个子项设置了1个插入,1个插入和2个更新查询。外键的更新 - 它们在子表中设置parent_id列,但我可以看到插入已经正确设置了parent_id。

这是一个例子

@Entity
@Table(name = "PARENT")
public class Parent
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long parentId;

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "parent_id", nullable=false)
    private List<Child> children;
}

@Entity
@Table(name = "CHILD")
public class Child 
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @Column(name = "PARENT_ID")
    private Long parentId;

    //some other field
}

//The test looks like this

Parent parent = new Parent();
Child child1 = new Child();
Child child2 = new Child();
//set all fields

parent.addChild(child1);
parent.addChild(child2);

em.merge(parent);

是否可以不进行更新查询? 是否可以在一个查询中插入所有子项?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用persist代替merge

JPA EntityManager: Why use persist() over merge()?

答案 1 :(得分:-1)

没有。这不可能。因为在父表中插入后,可以插入子表。