如何从与Hibernate Jpa建立的具有ManyToMany关系的关联表中获取结果



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

用户.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;
}
}

和机构.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       |
|---------------------|------------------|

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

因此,将user_id作为参数,我想要每个establishment_id,以便从建立表中获取所有内容,给出establishment_id

有什么办法可以做到这一点吗?

谢谢。

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

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

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

如果目标是获取用户的所有建立,那么使用 Spring Data JPA 非常简单。

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

上面的代码应该足够了。

最新更新