20

私は日食で休止状態に取り組んでいます。単純な「From」クエリを実行しています。ここにコードがあります

  List list = sess1.createQuery("From Myview").list();
    System.out.println("Records Found :"+list.size());

    Iterator<Myview> i = list.iterator();

    while(i.hasNext())
    {
        Myview nS = i.next();
        System.out.println(nS.getFirstName()+" -- "+nS.getLastName()+" -- "+nS.getAddressLine1());
    }

問題は、list.size() が 11 を返すことです。これは、テーブルに 11 のレコードがあるためです。しかし、while ループにいると、同じレコードが複数回表示され、11 回目の反復後にループが終了します。ここに私の出力があります

ここに画像の説明を入力

ここに私が欲しいものがあります

ここに画像の説明を入力

私の出力では、レコードが 11 回表示されていますが、同じレコードが何度も繰り返されていることがわかります。そして、私が必要とするのは、後の画像に表示される出力です。

私は冬眠するのが初めてなので、この点で親切に助けてください

4

6 に答える 6

32

これは、hbm ファイルの id 要素が DB テーブルの PK ではない場合に発生します。Hibernate は、同じ ID を持つすべての行を同じオブジェクトとして扱います。

id 要素を変更して PK 列を指すようにするか、テーブルに複合主キーしかない場合は、composite-id 要素を使用します。

于 2013-04-30T08:31:18.730 に答える
0

テーブルが正しく入力されていることを確認しますか?試す :

List list = sess1.createQuery("SELECT * FROM Myview").list();

さらに、ビューからこのリストを取得していますか?このビューを正しく作成しましたか?

于 2012-05-12T16:16:53.603 に答える
0

同じ結果をフィルタリングするには、distinct キーワードを使用する必要があります。

于 2012-05-12T16:17:05.683 に答える
-1

マッピングに関連付けがある場合は、チェックしてください fetch=FetchType.EAGER。はいの場合は、他のフェッチ タイプまたは fetchMode を使用します。

于 2015-01-08T19:27:19.670 に答える