我是 Spring Data JPA 和 Hibernate 的新手,我在插入大量记录时遇到以下问题。
我有以下情况:
1) RoomMediaDAO Spring Data JPA界面:
@Repository
@Transactional(propagation = Propagation.MANDATORY)
public interface RoomMediaDAO extends JpaRepository<RoomMedia, Long> {
....................................................................
....................................................................
....................................................................
}
2)在另一个课程中,我使用 RoomMediaDAO 来保留 RoomMedia 对象的列表。该列表非常庞大而且很重,因为它包含许多对象,并且这些对象中的每一个都包含一个 byte [] 字段,表示映射表上的 BLOB 。
所以我有以下陈述,坚持列出mediaListToBeInserted :
roomMediaDAO.save(mediaListToBeInserted);
它工作正常,但它很慢,因为它逐个执行插入,事实上在控制台我可以看到这样的东西:
Hibernate: insert into room_media (description, media, id_room, time_stamp) values (?, ?, ?, ?)
Hibernate: insert into room_media (description, media, id_room, time_stamp) values (?, ?, ?, ?)
Hibernate: insert into room_media (description, media, id_room, time_stamp) values (?, ?, ?, ?)
Hibernate: insert into room_media (description, media, id_room, time_stamp) values (?, ?, ?, ?)
Hibernate: insert into room_media (description, media, id_room, time_stamp) values (?, ?, ?, ?)
............................................................................
............................................................................
............................................................................
所以这不是一个好的解决方案。
我怎么能说Hibernate用一个插入语句插入更多记录?我的意思是我可以使用Hibernate做这样的事情吗?
INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ),
( Value1, Value2 ),
( Value1, Value2 ),
.................................
.................................
.................................
( Value1, Value2 )
我绝对需要这样的东西来提高我的批次的性能。
答案 0 :(得分:2)
此link提供了有关执行批量插入的不同方法的详细说明。斜体字中提到这些方法存在一些问题。
order_inserts
。 Identity
,则不起作用。PS:每种方法都有其优点和优点。 DIS-ADV。选择适合你的那个。