对于任何基本错误,我真的很抱歉,所以我有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
有什么办法吗?
谢谢。
答案 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();
上面的代码应该足够了。