保存到LinkedHashSet <string> - BEGINNER </string>

时间:2011-08-08 08:00:49

标签: java mysql list linkedhashset

@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的原因是为了避免向DB输入重复值。我将首先调用方法listHotels(),并检查它是否已包含值,如果不是,我将值保存到数据库

修改

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

这就是我将记录保存到我的数据库的方式

2 个答案:

答案 0 :(得分:3)

您无法更改query.getResultList()的结果类型,但您可以列表转换为LinkedHashSet

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

(创建的LinkedHashSet将具有列表中的唯一元素。但是您显示的示例是SELECT sql,而不是INSERT / UPDATE。为了保证数据库上的唯一记录,您必须进行这样的安排 - 使用LinkedHashSet左右 - 在INSERT / UPDATE部分。如果你已经使用LinkedHashSet添加到数据库,数据库将不会有重复的记录。顺便说一句,你有必要的唯一约束数据库对吗?)

答案 1 :(得分:1)

您无法将列表映射到集合。如果您只想消除重复,那么您可以使用数据库查询