@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);
}
}
这就是我将记录保存到我的数据库的方式
答案 0 :(得分:3)
您无法更改query.getResultList()的结果类型,但您可以将列表转换为LinkedHashSet
:
LinkedHashSet<String> hotel= new LinkedHashSet(query.getResultList());
(创建的LinkedHashSet将具有列表中的唯一元素。但是您显示的示例是SELECT sql,而不是INSERT / UPDATE。为了保证数据库上的唯一记录,您必须进行这样的安排 - 使用LinkedHashSet左右 - 在INSERT / UPDATE部分。如果你已经使用LinkedHashSet
添加到数据库,数据库将不会有重复的记录。顺便说一句,你有必要的唯一约束数据库对吗?)
答案 1 :(得分:1)
您无法将列表映射到集合。如果您只想消除重复,那么您可以使用数据库查询