【发布时间】:2018-09-20 23:59:20
【问题描述】:
我创建了一个查询,我想在同一个表中使用内部查询更新某些列。并且查询在 MySQL 工作台中运行良好,但如果我在 java 中使用相同的查询,那么它会给我类似
的错误expecting "set", found 'INNER'
这是我创建的查询。
UPDATE table1 t1
INNER JOIN (SELECT MAX(time)
FROM table1 WHERE id = 1) t2
ON t1.time = t2.time
SET t1.fromUserId=305,
t1.toUserId=306,
t1.type='Positive',
t1.subcategoryId=508,
t1.isDeleted=false,
t1.isNotify=true;
Java 代码
@Override
public void methodName(DTOClass dtoClass) throws DatabaseException {
logger.info("*******************In save-update ******************");
StringBuilder saveQuery = new StringBuilder();
try {
saveQuery.append(" UPDATE table1 t1 INNER JOIN (SELECT MAX(time) FROM table1 ");
saveQuery.append(" WHERE id = :addedBy) t2 ON t1.time = t2.time ");
saveQuery.append(" SET t1.fromUserId=:fromUserId, t1.toUserId=:toUserId, t1.type=:type, ");
saveQuery.append( " t1.subcategoryId=:subcategoryId, t1.isDeleted=false, t1.isNotify=:isNotify ");
logger.info(saveQuery.toString());
Query query = getCurrentSession().createQuery(saveQuery.toString());
query.setParameter("addedBy", dtoClass.getAddedBy());
query.setParameter("fromUserId", dtoClass.getFromUserId());
query.setParameter("toUserId", dtoClass.getToUserId());
query.setParameter("type", dtoClass.getType());
query.setParameter("subcategoryId", dtoClass.getSubcategoryId());
query.setParameter("isNotify", dtoClass.getIsNotify());
query.executeUpdate();
} catch (Exception exception) {
logger.error(exception.getMessage(), exception);
throw new DatabaseException(ResourceManager.getProperty(EXCEPTION_DAO_USER));
}
}
有人可以帮忙吗? 提前致谢!
【问题讨论】:
-
你能在你使用的代码中添加Java吗?
-
可以试试不使用 Inner 吗?让它只是加入,默认情况下它是内部的。在我看来,解析查询时 java mysql 驱动程序导致了问题
-
如何执行查询?是不是 JPQL,因为如果是这种情况,那么它不支持加入更新
标签: java mysql mysql-workbench mysql-error-1064