【发布时间】:2022-01-30 22:40:31
【问题描述】:
我有 2 个实体。用户和角色。它们之间的关系是多对多单向。
@ManyToMany(fetch = FetchType.LAZY)
@ToString.Exclude
@JoinTable(name = "uber_user_role",
joinColumns = @JoinColumn(name = "uber_user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
当持久化一个新的用户实体时,ID 为 1 的角色实体应该与用户相关联。到目前为止,我的代码如下所示:
Role role = em.getReference(Role.class, 1L);
user.getRoles().add(role);
em.persist(user);
它可以工作,但会生成 3 条 sql 语句
- 选择角色获取角色对象的语句
- Insert 语句用于插入新的用户实体
- Insert 语句用于在联结表中插入它们之间的关系
有没有更好的方法来实现这种行为?我认为第一个选择语句是多余的?我们能否改为获取角色对象的代理,然后只进行 2 次插入?
【问题讨论】:
标签: java sql hibernate many-to-many