2012-02-21 10 views
0

私は簡単なTwitterスクレイピングアプリケーションを作成しています。 Twitterを正しく照会し、データをMySQLデータベースに保存しているアプリケーションの起動時に仕事があります。私が遭遇する問題は、このデータをダンプしようとするときです。 Model.findAll()から返されたリストは、Xの重複量を返します。ここで、Xは、そのテーブルの行の総数です。次のようにJava Play Framework findAllが重複を返す

コントローラーのコードは次のとおりです。

List<Tweets> tweets = Tweets.findAll(); 
render(tweets); 

次のようにHTMLコードは次のとおりです。

#{list tweets, as:'tweet'} 
    <div class="tweet"> 
     <span> 
      ${tweet.tweet_text} 
     </span> 
    </div> 
#{/list} 

私も、コントローラのコードで周り台無しにし、これを取得するために機能することを発見しましたつぶやきのそれぞれを返す:

List<String> tweets = Tweets.find("SELECT tweet_text FROM Tweets tweets").fetch(); 

返すことができる複数の列を選択するとそれはList<Object>オブジェクトに、そのリストを反復し、それからList<Tweets>オブジェクトを作成しますが、これは間違った方法です。どのようなアドバイスは私が行方不明になる可能性のあるものに役立ちます。

tl; dr; Model.findAll()が重複して返されていますが、理由はわかりません。

EDIT:質問している人には、の重複がデータベースにあります。

+0

を削除する

SELECT distinct tweet from Tweets tweet 

を行うことができ、あなたは、MySQLに重複をインポートしないことを検証しましたか? – Jeroen

+0

あなたはこのエンティティに熱心にフェッチされた関連がありますか?そのマッピングを知ることは役に立ちます。 –

+0

@Jeroはい、この表に重複はありません。 – LNendza

答えて

0

あなたはそれらをフェッチするのではなく、重複を挿入していないことを確認しましたか?あなたは確かにあなたのデータベースを照会することができます。重複を表示しないように(しかし、根本的な問題を解決することではない)

一つの方法として、次のクエリを使用することです:あなたは親1と子オブジェクトを取得する際、重複を持っている

List<String> tweets = Tweets.find("SELECT tweet_text FROM Tweets tweets group by tweet_text").fetch(); 
+0

はい、データベースに入力されるデータは一意です。クエリを実行すると、投稿したクエリと同じ結果が得られます。 – LNendza

0

一つの可能​​性はあります。結合によって重複が発生しています。この場合、あなたは重複

+0

もう少し明確にすることはできますか? 「親オブジェクトを持つ子オブジェクトをフェッチする」とはどういう意味ですか? – LNendza

+0

あなたのツイートオブジェクトが子オブジェクトの場合、例えば1つのツイートは複数のタグを持つことができ、あなたは熱心な読み込みを行います(hqlでの結合フェッチのように)。つぶやきに2つのタグがある場合、 distinctキーワード –