单向多对一的Spring数据jpa规范

时间:2017-11-23 20:26:55

标签: java spring-data-jpa

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. 在city表中选择publicId等于给定字符串的城市;
  2. 获取酒店的城市,并将其与#1的结果进行比较。
  3. 似乎出了问题。这是我第一次使用规范,任何提示都有帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

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

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