Java 由于参数异常,应用程序无法启动

Java 由于参数异常,应用程序无法启动,java,openjpa,Java,Openjpa,但我有一个错误 SQL错误1093:无法在FROM子句中为更新指定目标表“m_appuser_logdetails” 我看不出加入获取部分的原因。 是否有什么东西阻止您使用以下内容 public interface AppUserLoginHistoryRepository extends JpaRepository<AppUserLoginHistory, Long>, JpaSpecificationExecutor<AppUserLoginHist

但我有一个错误

SQL错误1093:无法在FROM子句中为更新指定目标表“m_appuser_logdetails”


我看不出加入获取部分的原因。 是否有什么东西阻止您使用以下内容

    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);

}

创建一个字符串变量,得到SQL的结果,复制并粘贴到DBMS中。在我看来,这似乎是sql字符串中的一个错误。用户可以多次登录,而无需用户从我尝试构建的系统中发起注销。因此,登录系统日期字段的次数与用户登录的次数相同。所以,从特定用户的几行列表中,我想更新最新的登录行,忽略该用户的其余行。希望我已经为你解释了这个概念this@IppezRobert我建议在更新中添加WHERE子句。根据sql,我尝试使用WHERE子句进行查询,如下更新m_appuser_logdetails SET logout_computer_date='2021-02-20 13:12:09'其中login_computer_date=从m_appuser_logdetails和user_id=1限制1但是我得到了错误SQL错误1093:您不能在中指定更新的目标表'm_appuser_logdetails'clauseuery@IppezRobert,表示无法更新在SELECT中使用的表,并且它提供了备选方案。希望对你有帮助。罗伯特,我建议你
UPDATE AppUserLoginHistory logdet
SET logdet.logoutComputerDate = :logoutDate
   ,logdet.forcedLogout = :isForcedLogout