@Query("SELECT P FROM ParentEntity P \n" +
"INNER JOIN P.childEntities C \n" +
"WHERE C.childId IN (:childIds)")
List<ParentEntity> findByChildIds(@Param("childIds") List<UUID> childIds);
当childIds参数有值时,查询可以正常工作。但是childIds是一个可选参数,它可能是一个空列表或null,在这种情况下我想忽略where子句并简单地返回
SELECT P FROM ParentEntity P \n" +
"INNER JOIN P.childEntities C
所以我将查询修改为:
@Query("SELECT P FROM ParentEntity P \n" +
"INNER JOIN P.childEntities C \n" +
"WHERE ((:childIds) IS NULL OR C.childId IN (:childIds))")
List<ParentEntity> findByChildIds(@Param("childIds") List<UUID> childIds);
现在,当childIds为空(=[])时,该查询返回0个结果,因为(:childIds)为null
为false,(:childIds)中的c.childid也始终为false。但我要这个箱子里的所有行。
org.postgresql.util.PSQLException: ERROR: could not determine data type of parameter $1
而不是异常,我希望所有的行也返回这里。
您实际上有两个独立的查询,因此不是将逻辑隐藏在SQL中,而是将其移到default
方法中选择适当的直接的JPA方法:
default List<ParentEntity> findByChildIds(List<UUID> childIds) {
if (childIds == null || childIds.isEmpty()) {
return getAll();
}
return getByChildIds(childIds);
}
@Query("SELECT P FROM ParentEntity P \n" +
"INNER JOIN P.childEntities C \n" +
"WHERE C.childId IN (:childIds)")
List<ParentEntity> getByChildIds(@Param("childIds") List<UUID> childIds);
@Query("SELECT P FROM ParentEntity P \n" +
"INNER JOIN P.childEntities C")
List<ParentEntity> getAll();
这使得SQL更容易阅读,逻辑更容易遵循,而且它为数据库提供了更好的优化机会。
这里的所有方法都可以随意命名--它们不需要使用JPA方法关键字。
问题内容: 我正在使用嵌套集模型在iPhone上的本地SQLite数据库中存储较大的数据层次结构。我从他们的网站上阅读了MySQL技术文章,了解如何执行此操作,但是他们建议的查询(以及我需要的查询)之一似乎不适用于SQLite,并且我不确定如何解决它。 SQLite报告不是列,我认为这是因为其子查询实现不完整。有人对如何解决此限制有任何想法吗? 查询的目的是获取给定父节点的所有直接子代。 问题答案
我正在研究一个递归函数,它接受一个列表和值ex:'b'(a. b),如果找不到则返回nil,如果找到则返回t。我的问题是在行(cond((eq A(car L))t)中,即使在(cond(((and(atom L(eq A L)))t)返回之后,它似乎也在检查该条件。我的印象是,如果满足该条件,执行停止,函数返回。有什么方法可以解决这个问题吗?此外,我只能使用原始函数defuncond cons
你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。 我得到这个错误: Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM U
我有这个对象: 作为此回购方法的输入传递(简化): 在我所做的测试中,phaseBean以这种方式被定值: 当执行repo方法时,我得到以下错误: 我做了2个不同的测试: 注释查询的“row1”并执行方法- 因此,我确信问题在于检查:{{#phaseBean.subPhase}为null对内部对象无效<有什么建议吗?谢谢。
我正试图改变从默认状态到滑入状态的转变。我想保持我的minSdkVersion为3,但是直到API级别5(Android 2.0)才添加overridePendingTransition。 我尝试创建一个整数来表示SDK版本,然后仅在Android 1.6或更低版本中通过一个简单的if语句重写转换。 Eclipse给了我一个LINT警告,声明“调用需要API级别5(当前最小值为3):android
问题内容: 非常感谢你的帮助。我有一个和表。位置 我对位置模型执行以下查询。 然后,我要对其执行附加查询并根据以下内容对其进行过滤 该查询并 没有 工作。它返回一个空对象。 这是参数: location_params 1} permitted: true> ads_params 1} permitted: true> 不允许这样输入特定的列: 我有postgresql,我没有考虑过使用SQL,但是