我已经构建了一个看起来像这样的NamedQuery:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Run Code Online (Sandbox Code Playgroud)
我想要做的是填写参数:inclList与项目列表而不是一个项目.例如,如果我有一个new List<String>() { "a", "b", "c" }如何在:inclList参数中得到它?它只允许我编纂一个字符串.例如:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Run Code Online (Sandbox Code Playgroud)
我知道我可以构建一个字符串并从中构建整个Query,但我想避免开销.有没有更好的方法呢?
相关问题:如果List非常大,有没有什么好的方法来构建这样的查询?
我有以下参数化的JPA或Hibernate查询:
SELECT entity FROM Entity entity WHERE name IN (?)
Run Code Online (Sandbox Code Playgroud)
我想将参数作为ArrayList <String>传递,这可能吗?Hibernate电流告诉我,那
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)
这有可能吗?
解答:作为参数的集合仅适用于像" :name" 这样的命名参数,而不适用于像" ?" 这样的JDBC样式参数.
我在使用postgres 9.4实例获取此本机查询时遇到问题.
我的存储库有一个方法:
@Query(value = "SELECT t.* " +
"FROM my_table t " +
"WHERE t.field_1 = ?1 " +
"AND t.field_2 = 1 " +
"AND t.field_3 IN ?2 " +
"AND t.jsonb_field #>> '{key,subkey}' = ?3",
nativeQuery = true)
List<Entity> getEntities(String field1Value,
Collection<Integer> field3Values,
String jsonbFieldValue);
Run Code Online (Sandbox Code Playgroud)
但是日志显示了这个:
SELECT t.* FROM my_table t
WHERE t.field_1 = ?1
AND t.field_2 = 1
AND t.field_3 IN ?2
AND t.jsonb_field ? '{key,subkey}' = ?3
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
内部异常:org.postgresql.util.PSQLException:没有为参数2指定值.
我在方法调用之前直接记录了参数,并且它们都是提供的.
我不确定为什么在日志中#>>显示?.我需要逃脱 …