![](/img/trans.png)
[英]Spring Data JPA - SQL Grammar exception when trying to use IN clause with UPDATE Query
[英]Ignite with spring data jpa use grammar IN
当我将 JPA 与IN
一起使用时,会导致一些问题,我该如何解决? 我对表达IN?[*]
感到困惑。 谢谢
ignite:2.7.6
spring jpa:ignite-spring-data_2.0
spring boot:2.0.9.RELEASE
h2:1.4.197
jpa 方法:列出 findByShipVisitIdIsIn(List shipVisitIdList); 或 findByShipVisitIdIn。
第一种方法'findByArrivedTimeGreaterThanEqualAndArrivedTimeLessThanEqual'工作正常
@RepositoryConfig(cacheName = "BerthplanShipVisitCache")
public interface BerthplanShipVisitRepository extends IgniteRepository<BerthplanShipVisit, String>,
HdShipIdRepository<BerthplanShipVisit, String> {
List<BerthplanShipVisit> findByArrivedTimeGreaterThanEqualAndArrivedTimeLessThanEqual(Timestamp start, Timestamp end);
List<BerthplanShipVisit> findByShipVisitIdIsIn(List<String> shipVisitIdList);
}
SQL 是由ignite-spring-data
插件自动生成的,我猜它在ignite-spring-data
和h2
问题跟踪:
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT ""BerthplanShipVisitCache"".""BerthplanShipVisit""._KEY, ""BerthplanShipVisitCache"".""BerthplanShipVisit""._VAL FROM ""BerthplanShipVisit"" WHERE ((""BerthplanShipVisit"".""shipVisitId"" IN ?[*]))"; expected "("; SQL statement:
SELECT "BerthplanShipVisitCache"."BerthplanShipVisit"._KEY, "BerthplanShipVisitCache"."BerthplanShipVisit"._VAL FROM "BerthplanShipVisit" WHERE (("BerthplanShipVisit"."shipVisitId" IN ?)) [42001-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.getSyntaxError(DbException.java:217)
at org.h2.command.Parser.getSyntaxError(Parser.java:555)
at org.h2.command.Parser.read(Parser.java:3518)
at org.h2.command.Parser.readCondition(Parser.java:2433)
at org.h2.command.Parser.readAnd(Parser.java:2342)
at org.h2.command.Parser.readExpression(Parser.java:2334)
at org.h2.command.Parser.readTerm(Parser.java:3252)
at org.h2.command.Parser.readFactor(Parser.java:2587)
at org.h2.command.Parser.readSum(Parser.java:2574)
at org.h2.command.Parser.readConcat(Parser.java:2544)
at org.h2.command.Parser.readCondition(Parser.java:2370)
at org.h2.command.Parser.readAnd(Parser.java:2342)
at org.h2.command.Parser.readExpression(Parser.java:2334)
at org.h2.command.Parser.readTerm(Parser.java:3252)
at org.h2.command.Parser.readFactor(Parser.java:2587)
at org.h2.command.Parser.readSum(Parser.java:2574)
at org.h2.command.Parser.readConcat(Parser.java:2544)
at org.h2.command.Parser.readCondition(Parser.java:2370)
at org.h2.command.Parser.readAnd(Parser.java:2342)
at org.h2.command.Parser.readExpression(Parser.java:2334)
at org.h2.command.Parser.parseSelectSimple(Parser.java:2291)
at org.h2.command.Parser.parseSelectSub(Parser.java:2133)
at org.h2.command.Parser.parseSelectUnion(Parser.java:1946)
at org.h2.command.Parser.parseSelect(Parser.java:1919)
at org.h2.command.Parser.parsePrepared(Parser.java:463)
at org.h2.command.Parser.parse(Parser.java:335)
at org.h2.command.Parser.parse(Parser.java:311)
at org.h2.command.Parser.prepareCommand(Parser.java:278)
at org.h2.engine.Session.prepareLocal(Session.java:611)
at org.h2.engine.Session.prepareCommand(Session.java:549)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:694)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepare0(IgniteH2Indexing.java:539)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:509)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:476)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatementAndCaches(IgniteH2Indexing.java:2635)
... 89 common frames omitted
最后,我编辑源代码 org.apache.ignite.springdata20.repository.query.IgniteRepositoryQuery prepareQuery 方法。 在其中,处理“IN?” 到 'IN (?,?)' ,参数也变平了。 这似乎没问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.