Spring Boot ManyToMany Hibernate 持久化性能

时间:2021-05-23 02:02:48

标签: spring-boot performance hibernate many-to-many persistence

我的问题可能是新手问题,但找不到答案。

我们为什么使用

        User usr = entityManager.getReference(User.class, userId);
        usr.getRoomsFavourites().add(entityManager.getReference(Room.class, roomId));
        entityManager.persist(usr);

而不是直接插入关系表?

    @Query(value = "INSERT INTO user_room_favourites (user_id, room_id) VALUES (?1, ?2)", nativeQuery = true)
    void addFavoriteRoomByUserId(Long userId, Long roomId);

对于第一个选项,我们有很多开销,即使 getReference 只获取实体的 ID,它也会转到数据库,在我的情况下,它会在实际插入之前进行 3 次大选择和大量连接

对于第二个选项,我们只进行插入

我在这里看到的唯一缺点是用户或房间不存在或重复 PK 等错误:

could not execute statement; SQL [n/a]; constraint [user_room_favourites_pkey];

但是可以轻松处理异常。 此外,由于 Native Query,将来迁移到另一个数据库可能会更加困难。

我看不出任何其他缺点,我认为出于性能目的,第二种方式要好得多。

有人能解释一下吗? 提前致谢。

0 个答案:

没有答案