java - 自定义 hibernate 标准(一对多关系)

标签 java spring hibernate

我需要创建自定义 Hibernate 查询。

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<User> criteria = builder.createQuery(User.class);
    Root<User> user = criteria.from(User.class);
    List<Predicate> restrictions = new ArrayList<>();
    restrictions.add(builder.equal(user.get("firstname"), user.getFirstName()));
    List<User> users = (List<User>) entityManager.createQuery(criteria).getResultList();

我需要添加额外的限制条件。我有额外的模型 Photo,它使用外键 user_id 连接到模型 User。 我需要找到有照片的用户。

用户模型包含:

 private List<Photo> photos;

 @OneToMany(fetch = FetchType.LAZY, mappedBy = "photo", cascade = CascadeType.ALL)
 @Fetch (FetchMode.SELECT)
 @JsonIgnore
 public List<Photo> getPhotos() {
     return photos;
 }

照片模型包含:

private User user;

@ManyToOne
@JoinColumn(name="user_id")
public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

已更新

我需要这样的东西:

restrictions.add(builder.isNotNull(user.get("photos")));

但它不起作用。

问题不在于如何组合 2 个限制,问题在于如何添加限制 isNotNull...用户对照片一无所知。照片了解用户,因为它们有 user_id。

更新2:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "."

SQL:

select * from User user0_ cross join Photo photos1_ where user0_.id=photos1_.user and (. is not null)

我需要遵循 SQL:

 SELECT DISTINCT user.* FROM user
 LEFT JOIN photo
 ON user.id = photo.user_id;

最佳答案

试试这个:

restrictions.add(Restrictions.and(Restrictions.eq(user.get("firstname"), user.getFirstName()),Restrictions.isNotNull(user.get("photos")));

更新:您正在寻找的双向关系是这样的:

照片类别:

@ManyToOne
@JoinColumn(name="user")
private User user;

用户类别:

@OneToMany(mappedBy="user")
private Set<Photo> photos;

在此例中,您可以双向映射,以便您可以访问用户的照片以及从照片访问用户。

关于java - 自定义 hibernate 标准(一对多关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32836826/

相关文章:

java - 双向关系的 JPA 循环引用

Java awt.Robot : CTRL+ALT+DEL does not bring up desired screen

java - Heroku 上使用 Gradle 构建的 Oracle JDK 8

java - Spring:嵌套的应用程序上下文

spring - 隐藏 SpringFox 2 中 Spring MVC Controller 的返回值

Spring 3、ReST、@ResponseBody 和 @ExceptionHandler

java - 使用mockito进行不需要的模拟

java - 从 JVM 崩溃中恢复

java - Hibernate 子查询将 DetachedCriteria 应用到 ManyToMany 连接表

java - 子表上的 Hibernate Criteria API