我如何从使用Hibernate Jpa与ManyToMany关系创建的关联表中获取结果

时间:2018-10-24 19:57:51

标签: java hibernate jpa

对于任何基本错误,我真的很抱歉,所以我有2个实体User和Establishment,并且已经使用hibernate映射了具有ManyToMany关系的那些实体,如下所示:

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,只是不存在,因为im扩展了具有这些值的Abstract类。

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

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

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

因此,将user_id作为参数,我希望每个Establishment_id,以便从建立表中获取所有内容,并给定Establishment_id

有什么办法吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

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

每次查询用户或场所时,您都可以导航相应的关联并按以下方式获取所需的数据:

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

答案 1 :(得分:1)

如果目标是获得所有用户的认可,那么使用Spring Data JPA非常简单。

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

上面的代码应该足够了。