【问题标题】:Spring data jpa specification for unidirectional many-to-one单向多对一的 Spring data jpa 规范
【发布时间】:2018-05-07 20:29:54
【问题描述】:
public class Hotel{
    @ManyToOne(optional = false)
    @NotNull
    @JoinColumn(name = "hotel_city", referencedColumnName = "city_id")
    private City city;
}

public class City{
    @Column(name = "public_id", updatable = false, unique = true)
    @NotEmpty
    private String publicId;
}

我想查找城市的 publicId 等于给定字符串的所有酒店。

public Predicate toPredicate(Root<Hotel> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Subquery<City> subquery = query.subquery(City.class);
                Root<City> subRoot = subquery.from(City.class);
                Predicate cityIdPredicate = cb.equal(subRoot.get("publicId"), criteria.getValue().toString());

                return cb.equal(root.get("city"), cityIdPredicate);
}

我正在尝试使用上面的代码来

  1. 在城市表中选择publicId等于给定字符串的城市;
  2. 获取酒店所在城市并将其与#1 的结果进行比较。

好像出了点问题。这是我第一次使用规范,任何提示都是有帮助的。 谢谢。

【问题讨论】:

标签: java spring-data-jpa


【解决方案1】:

大声笑,我刚刚找到了最简单的解决方案。

        return cb.equal(root.get("city").get("publicId"), criteria.getValue().toString());

【讨论】:

  • 真的哈哈 :)) 我不敢相信它像你说的那样容易:))
猜你喜欢
  • 2015-10-28
  • 2017-01-09
  • 2017-08-19
  • 2017-10-28
  • 1970-01-01
  • 2016-07-22
  • 2016-02-17
  • 2017-01-12
  • 2019-05-25
相关资源
最近更新 更多