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は、重複した値が DB に入力されるのを避けるためです。最初にメソッドを呼び出し、listHotels()既に値が含まれているかどうかを確認し、含まれていない場合は値を DB に保存します。

編集

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

これがレコードをDBに保存する方法です

4

2 に答える 2

3

query.getResultList() の結果の型を変更することはできませんが、List を次のように変換LinkedHashSetできます。

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

(作成された LinkedHashSet には、リストからの一意の要素が含まれます。ただし、示した例は、INSERT/UPDATE ではなく SELECT sql です。データベースで一意のレコードを保証するには、LinkedHashSet を使用してそのような配置を行う必要があります。またはそう - INSERT/UPDATE 部分で。LinkedHashSetデータベースに追加するために既に を使用している場合、データベースに重複レコードはありません。ところで、データベースに必要な一意の制約がありますか?)

于 2011-08-08T08:09:08.133 に答える
1

リストをセットにマップすることはできません。重複を排除したいだけの場合は、DBクエリを使用して行うことができます

于 2011-08-08T08:04:36.167 に答える