0
@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.

我在这里使用 a 的原因LinkedHashSet是为了避免将重复值输入到数据库中。我将首先调用该方法listHotels(),并检查它是否已经包含该值,如果没有,我会将这些值保存到 DB

编辑

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

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

4

2 回答 2

3

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

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

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

于 2011-08-08T08:09:08.133 回答
1

您不能将列表映射到集合。如果您只是想消除重复,那么您可以使用您的数据库查询来做到这一点

于 2011-08-08T08:04:36.167 回答