【发布时间】:2017-06-18 14:42:45
【问题描述】:
我最近从 JEE 切换到 Spring Boot,到目前为止我很喜欢它。 但是我遇到了一个小问题。我有这个方法可以获取过去看起来像这样的惰性引用:
public Foo getParentWithChildren(long id, boolean isFetchChild, boolean isFetchPets) {
StringBuilder sql = new StringBuilder();
sql.append("select DISTINCT(p) from Parent p");
if(isFetchChild) {
sql.append(" left join p.child c");
} if(isFetchPets) {
sql.append(" left join p.pets pts");
}
sql.append(" where p.id=:id");
TypedQuery<Foo> query = em.createQuery(sql.toString(), Foo.class);
query.setParameter("id", id);
return query.getSingleResult();
}
现在有了 spring 数据和它们很棒的接口,我想在接口上使用 @Query 注释做一些类似的事情,而不必编写自定义实现。但是是否有可能只使用界面来做类似的事情。
下面的例子显然行不通,但我希望你能理解我想要实现的目标
@Query("select distinct(p) from Parent p " +
(fetchChild ? " left join p.child c" : "") +
(fetchPets ? " left join p.pets pts" : "") +
" where p.id=:id")
Foo getParentWithChildren(@Param("id") long id, @Param("fetchChild") boolean isFetchChild, @Param("fetchPets") boolean isFetchPets);
我有类似的可能吗?
【问题讨论】:
-
不,但是如果这是您的确切情况,您可以在接口中创建2个方法并根据
isFetchChild调用适当的方法。 -
实际上真正的父母拥有 5 个孩子,例如 5 个布尔参数。并且还有不同的组合。有时你想要孩子 1 和 3,有时只有 4 个,有时全部 5 个等等。那么我必须为所有可能的场景编写方法?
标签: java jpa spring-boot spring-data jpql