-1

我有3个表如下

Post
    pid pname 

TagPost
    tagid postId postTime

Tag
    tagid tagNam

一个帖子可以有多个标签,一个标签可以有多个帖子。基本上是一个* n 映射。

现在我如何使用session.createQuery()

  1. 通过帖子的创建时间选择给定标签顺序的所有挑战我可以做 post.getTagSet(),但我只想要 n 个最新帖子。
  2. 选择所有java标签之一的帖子?按 postTime 排序。
  3. 这是在性能方面对这种情况进行建模的正确方法吗?或者我应该有以下结构?

    postid pname postTime 的标签

在这种情况下,标签列的值可以用逗号分隔。标签列的示例值 = java,hibernate

4

1 回答 1

0

考虑到所有情况,三张桌子的拳头设计是更好的设计。您可以有效地运行查询。这些类型的查询在 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,第二种情况tag)。

感谢和快乐的编码!

于 2012-12-05T03:31:28.953 回答