Я пытаюсь запустить запрос в спящем режиме. Я делаю это следующим способом:
private void insertQuery(String toDeleteNewOrOld) {
String queryString = "";
if("deleteNew".equals(toDeleteNewOrOld)){
queryString =
" delete dmpg2 \n"
+ "from DmPriceGroup dmpg1 \n"
+ " join DmPriceGroup dmpg2 on dmpg1.priceGroupId = dmpg2.priceGroupId \n"
+ " where dmpg1.uid <> dmpg2.uid \n"
+ " and dmpg1.priceGroupName <> dmpg2.priceGroupName \n"
+ " and dmpg1.dmCreateTime > dmpg2.dmCreateTime";
}
else if("deleteOld".equals(toDeleteNewOrOld)){
queryString =
"DELETE dmpg1\n"
+ "FROM DmPriceGroup dmpg1\n"
+ "join DmPriceGroup dmpg2 on dmpg1.priceGroupId = dmpg2.priceGroupId\n"
+ "where dmpg1.uid <> dmpg2.uid\n"
+ "and dmpg1.priceGroupName = dmpg2.priceGroupName\n"
+ "and dmpg1.dmCreateTime > dmpg2.dmCreateTime\n";
}
Map<String, Object> parameters = new HashMap<>();
writerLogic.executeQuery(getDmEntityClass(), queryString, parameters);
}
Когда я его выполняю, используется строка запроса условия deleteold, но это не удается со следующей ошибкой
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: FROM near line 2, column 1 [DELETE dmpg1
FROM com.schantz.generallife.dm.model.DmPriceGroup dmpg1
join com.schantz.generallife.dm.model.DmPriceGroup dmpg2 on dmpg1.priceGroupId = dmpg2.priceGroupId
where dmpg1.uid <> dmpg2.uid
and dmpg1.priceGroupName = dmpg2.priceGroupName
and dmpg1.dmCreateTime > dmpg2.dmCreateTime
]
Глядя на похожие вопросы, кажется, что это вызвано неправильным синтаксисом, однако, когда я вручную запускаю следующий код в ssms, он работает нормально
DELETE dmpg1
FROM DmPriceGroup dmpg1
join DmPriceGroup dmpg2 on dmpg1.priceGroupId = dmpg2.priceGroupId
where dmpg1.uid <> dmpg2.uid
and dmpg1.priceGroupName = dmpg2.priceGroupName
and dmpg1.dmCreateTime > dmpg2.dmCreateTime
Удаление dmpg1 после DELETE приведет к неожиданному вместо этого токен "присоединиться". Однако я не верю, что я смогу удалить из DmPriceGroup, не уточняя, кто присоединился к DmPriceGroup для удаления