使用JPA和Spring时从hibernate手动关闭会话
如果我希望使用批插入,我相信我必须使用hibernate来处理,因为JPA不支持它。我的问题是我应该如何处理这个会议。例如:使用JPA和Spring时从hibernate手动关闭会话,spring,hibernate,session,jpa,batch-processing,Spring,Hibernate,Session,Jpa,Batch Processing,如果我希望使用批插入,我相信我必须使用hibernate来处理,因为JPA不支持它。我的问题是我应该如何处理这个会议。例如: @Transactional public void persistData() { Session session = entityManager.unwrap(Session.class); for (int i = 0; i < 100; i++){ CRR crr = new CRR();
@Transactional
public void persistData() {
Session session = entityManager.unwrap(Session.class);
for (int i = 0; i < 100; i++){
CRR crr = new CRR();
session.save(crr);
if ( i % 20 == 0 ) {
session.flush();
session.clear();
}
}
}
在方法结束时,还是可以依靠请求结束时关闭的会话?在您尝试实现的过程中没有特定于Hibernate的内容,JPA中支持相同的基本操作:
for (int i = 0; i < 100; i++){
CRR crr = new CRR();
entityManager.persist(crr);
if ( i % 20 == 0 ) {
entityManager.flush();
entityManager.clear();
}
}
for(int i=0;i<100;i++){
CRR CRR=新的CRR();
entityManager.persist(crr);
如果(i%20==0){
entityManager.flush();
entityManager.clear();
}
}
由于这段代码没有什么不寻常的地方,您也不需要为手动会话处理做任何事情
可能您将此模式与使用特定于Hibernate且需要手动会话管理的无状态会话的批处理操作的不同方法混淆了
for (int i = 0; i < 100; i++){
CRR crr = new CRR();
entityManager.persist(crr);
if ( i % 20 == 0 ) {
entityManager.flush();
entityManager.clear();
}
}