Сохранить в LinkedHashSet <String>- НАЧАЛО - PullRequest
0 голосов
/ 08 августа 2011
@Override
public LinkedHashSet <String> listHotels() {
   Query query  = em.createNativeQuery("select  * from Hotel");
   LinkedHashSet <String> hotel= query.getResultList();
   return hotel;
}

Я получаю предупреждение, говорящее incompatible types. query.getResultList(); returns a List, но я хочу, чтобы метод возвращал значение LinkedHashSet.

Причина, по которой я здесь использую LinkedHashSet, состоит в том, чтобы избежать ввода дублирующих значений в БД. Сначала я вызову метод listHotels() и проверю, содержит ли оно уже значение, а если нет, сохраню значения в БД

EDIT

    public void saveHotel(Hotel hotel) {
    if (hotel.getId() ==null){
        em.persist(hotel);
    } else {
        em.merge(hotel);
    }
}

Вот как я могу сохранить записи в моей БД

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

Вы не можете изменить тип результата query.getResultList (), но вы можете преобразовать Список в LinkedHashSet:

LinkedHashSet<String> hotel= new LinkedHashSet(query.getResultList());

(Созданный LinkedHashSet будет иметьуникальные элементы из списка. Но пример, который вы показали, - это SELECT sql, а не INSERT / UPDATE. Чтобы гарантировать уникальные записи в базе данных, вы должны сделать такое расположение - используя LinkedHashSet или около того - в INSERT /Часть ОБНОВЛЕНИЕ. Если вы уже используете LinkedHashSet для добавления в базу данных, база данных все равно не будет иметь дублирующихся записей. Кстати, у вас есть необходимые уникальные ограничения для базы данных, верно?)

1 голос
/ 08 августа 2011

Вы не можете отобразить Список на Набор. Если вы просто хотите удалить дубликаты, вы можете сделать это, используя запрос к БД

...