Я пытаюсь получить минимальное значение столбца в таблице. Это звучит тривиально, но у меня возникают проблемы (я использую базу данных MySql 5.1).Hibernate Projections.min() возвратил несколько строк
Ситуация немного сложная. У нас есть интерфейс, который реализуется из двух классов. Каждый из этих двух классов расширен из трех других классов. Каждый два из этих трех extendors имеют спящий режим отображения (базовые классы также отображение) => поэтому мы имеем интерфейс I реализован
CLASSA (преобразовываться) расширен classA1 (отображается), classA2 (отображается), classA3 (не отображается) ClassB (отображается) продлен classB1 (преобразовываться), classB2 (преобразовываться), classB3 (не отображается)
Здесь проблема с примером кода:
Criteria c = getSession().createCriteria(samplesType)
.setProjection(Projections.min("pollingTime"));
List resultList= c.list()`enter code here`;
После выполнения .list() в списке результатов есть три значения: Первый - это нуль, второй - нуль, третий содержит правильное минимальное значение, которое я ищу.
я использовал c.uniqueResult()
, но она "возвращает"
org.hibernate.NonUniqueResultException: запрос не возвращает уникальный результат: 3
Я также попытался использовать в Hibernate
createQuery(select min(pollingTime) from tableName).list()
но результат тот же (два нуля и один с правильным результатом).
Я также попытался добавить предопределенный ResultTransformer, чтобы удалить нулевые значения из списка, но я потерпел неудачу.
В качестве временного решения можно получить требуемое минимальное значение с помощью SQL-запроса:
createSQLQuery("SELECT MIN(pool_time) FROM tableName")
который является единственным решением на данный момент.
У вас есть идеи, по которым возвращенный результат неверен?
С уважением, Niki
На самом деле это одна из первых вещей, которые я проверил непосредственно с MySQL Query Browser. В этом столбце нет нулевых значений. Это хороший момент, учитывая, что этот столбец не является уникальным ключом и не установлен как недействительный. Niki Редактировать: Я также согласен с тем, что лучше узнать, почему я получаю нулевые значения, а не нахожу способ их фильтрации из результата. – user1228603
Я также пробовал следующий код. Строка qryStr = "select min (tn.pollingTime) from" + tableName + "tn, где tn.pollingTime! = NULL"; Список результатовList = getSession(). CreateQuery (qryStr) .list(); Результат в списке теперь отменен: minValue, null, null. Похоже, что как только я использую hibernate (query, creteria, projection и т. Д.) Для этой задачи, он возвращает неверные результаты. – user1228603