【问题标题】:Hibernate - How to persist many to many entityHibernate - 如何持久化多对多实体
【发布时间】: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 语句

  1. 选择角色获取角色对象的语句
  2. Insert 语句用于插入新的用户实体
  3. Insert 语句用于在联结表中插入它们之间的关系

有没有更好的方法来实现这种行为?我认为第一个选择语句是多余的?我们能否改为获取角色对象的代理,然后只进行 2 次插入?

【问题讨论】:

    标签: java sql hibernate many-to-many


    【解决方案1】:
    First up all the user and role mostly have oneToMany relationship.
    
    Second thing above you mention like three steps we need to follow there is no change.
    
    But, the role object selection you can get role object reference instead of getting object.
    
    In hibernate JPA repository queryfindById it will help you to get object reference.
    

    【讨论】:

    • 我很困惑,如果你坚持角色实体和用户实体,你怎么能在它们之间建立一对多的关系。用户可以有多个角色,因为角色可以有多个用户。
    • 它们不是您遵循的步骤,它们是从上面的代码生成的sql语句。我知道 JPA 存储库,但我想编写自己的查询以更好地感受和控制它们。你知道会话层或实体管理层对应的代码吗?
    • 我说的大多是一对多,不是说应该的。这取决于要求,而且我主要使用过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2015-11-03
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多