Hibernate-запрос дает такую же запись несколько раз
Я работаю в спящем режиме в затмении. Я выполняю простой запрос "От". Вот код
List list = sess1.createQuery("From Myview").list();
System.out.println("Records Found :"+list.size());
Iterator<Myview> i = list.iterator();
while(i.hasNext())
{
Myview nS = i.next();
System.out.println(nS.getFirstName()+" -- "+nS.getLastName()+" -- "+nS.getAddressLine1());
}
Проблема заключается в том, что list.size() возвращает 11, что верно, поскольку у меня есть 11 записей в моей таблице.
Но когда я нахожусь в цикле while, одни и те же записи показываются несколько раз, а термины цикла - после 11-й итерации. вот мой вывод
![enter image description here]()
вот что я хочу
![enter image description here]()
Теперь вы можете видеть, что в моем выводе запись отображается 11 раз, но одна и та же запись повторяется снова и снова. И мне нужен вывод, отображаемый на более позднем изображении.
Просьба помочь мне в этом отношении, поскольку я новичок в спящем режиме
Ответы
Ответ 1
Это происходит, когда элемент id в вашем файле hbm не является PK в вашей таблице DB. Hibernate обрабатывает все строки с тем же идентификатором, что и один и тот же объект.
Либо измените свой элемент id на столбец PK, либо используйте элемент составного идентификатора, если ваша таблица имеет только составной первичный ключ.
Ответ 2
Ваша сущность Myview должна реализовать интерфейс java.io.Serializable
Ответ 3
Вы уверены, что таблица правильно заполнена?
попробуйте:
List list = sess1.createQuery("SELECT * FROM Myview").list();
Кроме того, вы получаете этот список из представления? вы уверены, что правильно это сделали?
Ответ 4
Вы должны использовать отдельное ключевое слово для фильтрации того же результата.
Ответ 5
Если у вас есть ассоциация в сопоставлении, проверьте, есть ли fetch=FetchType.EAGER
. Если да, то используйте другой тип выборки или fetchMode.
Ответ 6
Поместите объекты, возвращаемые Hibernate, в LinkedHashSet и верните LinkedHashSet.