我的问题可能是新手问题,但找不到答案。
我们为什么使用
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,将来迁移到另一个数据库可能会更加困难。
我看不出任何其他缺点,我认为出于性能目的,第二种方式要好得多。
有人能解释一下吗? 提前致谢。