Когда я выполняю этот запрос автообъединение из моей Java программыHSQLDB: Обнаружен дублированной SQL псевдоним
Query query = session.createSQLQuery("SELECT DISTINCT * " +
"FROM lerneinheit AS le1 JOIN lerneinheit AS le2 " +
"ON le1.datum = le2.datum AND le1.pid = le2.pid " +
" WHERE " +
" le1.datum BETWEEN '2016-10-20' AND '2016-10-20' AND " +
" le1.pid = 3 AND " +
" (le1.abgesagtrechtzeitig = false OR le1.nichtabgesagt = true OR le1.erschienen=true) AND " +
" (le2.abgesagtrechtzeitig = false OR le2.nichtabgesagt = true OR le2.erschienen=true) AND " +
" le1.lernid!= le2.lernid AND " +
" (le2.beginn+1 BETWEEN le1.beginn AND le1.ende OR le2.ende-1 BETWEEN le1.beginn AND le1.ende) " +
" ORDER BY le1.beginn");
Я получаю следующее сообщение об ошибке:
org.hibernate.loader.custom.NonUniqueDiscoveredSqlAliasException: Encountered a duplicated sql alias [LERNID] during auto-discovery of a native-sql query
Хотя он отлично работает, если я сделайте это из phpAdmin. Все, что я нашел на этой теме, было совсем не полезно. Кто-нибудь понял, как это решить?
Вместо 'SELECT DISTINCT *', используйте имя всех столбцов, которые вам действительно нужны. Используйте псевдонимы столбцов, чтобы отличать один и тот же столбец от двух псевдонимов таблицы. – fredt
@fredt Мое намерение состояло в том, чтобы получить список, управляемый объектами Lerneinheit. Но, похоже, я буду использовать этот запрос для получения всех идентификаторов, а в другой функции я пытаюсь восстановить объекты по их идентификаторам. – Syrious
Несмотря на это, вам не нужны два объекта в каждой строке SELECT. Вы можете попробовать 'SELECT DISTINCT le1. * FROM ...' – fredt