@BatchSize不起作用 - Hibernate

时间:2015-09-01 11:53:57

标签: spring hibernate hibernate-annotations

我们有一个表, OneToMany 映射与表如下所示。

@Entity
@Table(name = "PARENT_DETAIL")
public class ParentVO {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "parentSeqGen")
@SequenceGenerator(name="parentSeqGen", sequenceName="PARENT_SEQ",  allocationSize = 1)
@Column(name = "PARENT_ID")
private Long parentId; 
.............
................

@OneToMany( cascade=CascadeType.ALL, orphanRemoval= true)
@JoinColumn(name="PARENT_ID", nullable = false)
@BatchSize(size = 10)
private Set<ChildVO> childLists;

......................

}

儿童表格为

@Entity
@Table(name = "PARENT_CHILD_MAPPING")
public class ChildVO {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "childSeq")
@SequenceGenerator(name="childSeq", sequenceName="CHILD_SEQ",  allocationSize = 1)  
@Column(name = "ID")
private Long id;

.............

}

现在,当我们更新Parent对象时,我们还需要更新子表。为此,我们在OneToMany注释中保留了CascadeType.All。

我们有3个孩子要更新。 Child表正在更新,但我可以在控制台中看到有3个Inserts,后面跟着3个孩子的3个更新。

我在某处读到了通过提供 mappedBy 属性可以避免更新(在外键上)。我们有单向关系,所以对于mappedBy有什么替代方案吗?或者我将不得不双向建立关系。

但我想BatchSize应该可行。它一次应该是3个插入,因为batchsize是10,对吗?

还在hibernate属性xml中提到了BatchSize。

<prop key="hibernate.jdbc.batch_size">20</prop>

我们正在使用HibernateTemplate更新方法(旧应用程序),如下所示。

public void update(IBaseVO vo) {
    HibernateTemplate ht = new HibernateTemplate(sessionFactory);
    ht.update(vo);
}

0 个答案:

没有答案