-1

私は次のように3つのテーブルを持っています

Post
    pid pname 

TagPost
    tagid postId postTime

Tag
    tagid tagNam

1つの投稿に複数のタグを含めることができ、1つのタグに複数の投稿を含めることができます。基本的に*nマッピング。

次に、以下を使用してHQLクエリをモデル化するにはどうすればよいですか?session.createQuery()

  1. post.getTagSet()を実行できる投稿の作成時間までに、特定のタグ順序に対してあるすべてのチャレンジを選択しますが、最新の投稿はn個だけにします。
  2. javaタグの1つとして含まれているすべての投稿を選択しますか?postTimeで注文します。
  3. これは、パフォーマンスの観点からこの種の状況をモデル化する正しい方法ですか?または、次の構造にする必要がありますか?

    postidpnamepostTimeタグ

この場合のタグ列の値はコンマで区切ることができます。タグのサンプル値column=java、hibernate

4

1 に答える 1

0

すべての状況を考慮すると、3つのテーブルを備えた最初のデザインの方が優れています。クエリを効率的に実行できます。これらの種類のクエリは、HQLでは非常に一般的です。

  1. n個の最新の投稿を取得するには、次のようなクエリを使用できます。

    Query query = session.createQuery("select tagPost.tag from TagPost as tagPost where tagPost.post = :post ORDER by tagPost.postTime");
    query.setMaxResults(n); // n is your expect newest number
    
  2. これも簡単です:

    Query query = session.createQuery("select tagPost.post from TagPost as tagPost where tagPost.tag = :tag ORDER by tagPost.postTime");
    query.setMaxResults(n); // n is your expect newest number
    

どちらの場合も、呼び出す前にオブジェクトパラメータをクエリに渡す必要がありますquery.list();(最初のケースpost、2番目のケースtag)。

おかげで、幸せなコーディング!

于 2012-12-05T03:31:28.953 に答える