【问题标题】:How can i get results from an association table created with a ManyToMany relation with Hibernate Jpa如何从使用 Hibernate Jpa 的 ManyToMany 关系创建的关联表中获取结果
【发布时间】:2026-02-10 09:20:03
【问题描述】:

对于任何基本错误,我真的是 hibernate 的新手,所以我有 2 个实体用户和建立,我已经使用休眠将这些实体映射为多对多关系,如下所示:

User.java 实体:

   @Entity
   @Table
   public class User extend AbstractEntity {

   @Column(name = "name", length = 255, nullable = false, unique = true)
   private String name;

   @Column(name = "email", length = 120)
   private String email;

   @Column(name = "phone")
   private String phone;

   @ManyToMany
   @JoinTable(name= "User_Establishment",
   joinColumns = {@JoinColumn(name="user_id") },
   inverseJoinColumns = {@JoinColumn(name="establishment_id") })
   private List<Establishment> establishments;


   public List<Establishment> getEstablishments() {
         return establishments;
   }

   public void setEstablishment(List<Establishment> establishments) {
         this.establishments= establishments;
   }
   }

和Establishment.java 实体:

   @Entity
   @Table
   public class Establishment extend AbstractEntity{

     @Column(name="nif", nullable=false, length=10)
     private String nif;

     @Column(name="code", nullable=false, length=11)
     private String code;

     @Column(name="name", nullable=false)
     private String name;

     @Column(name="address")
     private String address;

     @ManyToMany(mappedBy = "establishments")
     private List<User> users;

     public List<User> getUser() {
           return users;
     }

     public void setUser(List<User> users) {
           this.users= users;
     }

   }

两个实体都有一个 ID,它只是不存在,因为我扩展了一个具有这些值的抽象类。

它在数据库中创建了一个名为 User_Establishment 的表,如下所示:

|---------------------|------------------|
|      user_id        | establishment_id |
|---------------------|------------------|
|          12         |         34       |
|---------------------|------------------|

到目前为止一切顺利,我可以使用 seters 和 geters 在表中正确添加值。 但是现在我想使用带有休眠的查询来获取这些值,但我真的不知道该怎么做,因为当我尝试创建查询以访问存储库中的数据时,我不能,因为我没有存储库关联表。

所以给 user_id 作为参数,我想要每个机构 ID,以便从机构表中获取所有内容,并给出机构 ID

有什么办法吗?

谢谢。

【问题讨论】:

  • 不确定您要查询什么,您能详细说明一下吗?
  • 好吧,对不起,我会详细说明,所以给 user_id 作为参数,我想要每个机构 ID,以便从机构表中获取所有内容,给出机构 ID
  • 您应该通过 userId 选择用户,然后您将通过 getEstablishments getter 将所有机构作为一个集合,如下面的@LunaticJape 建议的那样。

标签: java hibernate jpa


【解决方案1】:

存储库通常只是放置与持久性相关的逻辑的地方,除非您暗示其他内容,否则无需创建。

每次查询用户或机构时,您都可以导航相应的关联并获取所需的数据,如下所示:

User user = entityManager.find(User.class, "SOMENAME");
user.getEstablishments(); // should give the related values`    

【讨论】:

  • 我明白了……但是“SOMENAME”可以是关联表中的值吗?
  • @coderTester 否,因为您需要一个标准(jpa2 中的 ou 标准)或 JQL 查询
【解决方案2】:

如果目标是获取用户的所有设施,使用 Spring Data JPA 非常简单。

User user = userDao.findById(userId);
List<Establishment> establishments = user.getEstablishments();

上面的代码应该够用了。

【讨论】:

    最近更新 更多