java - 由于参数异常,应用程序无法启动
问题描述
public interface AppUserLoginHistoryRepository
extends JpaRepository<AppUserLoginHistory, Long>, JpaSpecificationExecutor<AppUserLoginHistory> {
@Query("UPDATE AppUserLoginHistory logdet"
+ " JOIN FETCH (SELECT MAX(DISTINCT loginSystemDate) AS loginDate FROM AppUserLoginHistory WHERE tlr = :username) logdet2"
+ " ON logdet.loginSystemDate = logdet2.loginDate SET logdet.logoutComputerDate = :logoutDate, logdet.forcedLogout = :isForcedLogout")
@Modifying
void updateAppUserLogout(@Param("logoutDate") Date logoutDate, @Param("isForcedLogout") boolean isForcedLogout, @Param("username") String username);
}
从上面的代码片段中得到以下错误
原因:org.apache.openjpa.persistence.ArgumentException:“在字符 35 处遇到“JOIN”,但预期:[“SET”]。” 在解析 JPQL 时“更新 AppUserLoginHistory logdet JOIN FETCH (SELECT MAX(DISTINCT loginSystemDate) AS loginDate FROM AppUserLoginHistory WHERE tlr = :username) logdet2 ON logdet.loginSystemDate = logdet2.loginDate SET logdet.logoutComputerDate = :logoutDate, logdet.forcedLogout = :isForcedLogout” . 有关原始解析错误,请参阅嵌套堆栈跟踪。在 org.apache.openjpa.kernel.jpql.JPQLParser.parse(JPQLParser.java:54) 在 org.apache.openjpa.kernel.ExpressionStoreQuery.newCompilation(ExpressionStoreQuery.java:165) 在 org.apache.openjpa.kernel.QueryImpl .newCompilation(QueryImpl.java:718) 在 org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java: springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87) ...省略了 96 个常见帧原因:org.apache.openjpa.persistence.ArgumentException:在字符 35 处遇到“JOIN”,但预期: [“放”]。在 org.apache.openjpa.kernel.jpql.JPQL.jj_consume_token(JPQL.java:13064) 在 org.apache.openjpa.kernel 的 org.apache.openjpa.kernel.jpql.JPQL.generateParseException(JPQL.java:13188) .jpql.JPQL.set_clause(JPQL.java:735) 在 org.apache.openjpa.kernel.jpql.JPQL.update_clause(JPQL.java:731) 在 org.apache.openjpa.kernel.jpql.JPQL.update_statement(JPQL .java:148) 在 org.apache.openjpa.kernel.jpql.JPQL.parseQuery(JPQL.java:66) 在 org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.parse(JPQLExpressionBuilder.java:2439) 在org.apache.openjpa.kernel.jpql。
任何帮助表示赞赏。
编辑
从 SQL 我尝试使用 WHERE 子句进行查询,如下所示。
UPDATE m_appuser_logdetails
SET logout_computer_date = '2021-02-20 13:12:09'
WHERE login_computer_date = (SELECT MAX(DISTINCT login_computer_date)
FROM m_appuser_logdetails)
AND user_id=1 LIMIT 1
但我得到错误
SQL 错误 (1093): 您不能在 FROM 子句中指定目标表 'm_appuser_logdetails' 进行更新
解决方案
我看不出这JOIN FETCH
部分的原因。
有什么东西阻止您使用以下内容吗?
UPDATE AppUserLoginHistory logdet
SET logdet.logoutComputerDate = :logoutDate
,logdet.forcedLogout = :isForcedLogout
推荐阅读
- ios - App Store Connect API key fastlane 多账户问题
- swift - 当 WidgetCenter.shared.reloadAllTimelines() 被调用时,WidgetKit 不会从核心数据中获取更新的数据
- azure - 避免从功能应用程序中登录应用程序洞察力的严重级别 0
- python - SQLAlchemy 获取自某个值以来的最后一行
- mysql - MariaDB/MySQL UPDATE 语句具有多个连接,包括范围连接
- python - 如何将字符串列表转换为数据框 Python
- javascript - axios没有定义nodeJs
- javascript - 从其他表上传具有相同相关ID的excel文件
- c++ - 对映射中的 lower_bound 和 upper_bound
- javascript - 如何防止 Rollup 将导出语句移到顶部?