hibernate(native)中的多对多关系查询

时间:2012-12-04 18:41:24

标签: java hibernate java-ee hql

我有3张表如下

Post
    pid pname 

TagPost
    tagid postId postTime

Tag
    tagid tagNam

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

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

对HQL查询进行建模
  1. 按帖子的创建时间选择所有针对给定标签顺序的挑战我可以做post.getTagSet(),但我只想要n个最新的帖子。
  2. 选择所有以java作为其中一个标签的帖子?按邮政时间排序。
  3. 这是以正确的方式模拟这种情况的表现吗?或者我应该有以下结构?

    postid pname postTime tags

  4. 在这种情况下,标签列的值可以用逗号分隔。 标签的样本值column = java,hibernate

1 个答案:

答案 0 :(得分: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
    
  3. 在这两种情况下,您需要在调用query.list();之前将对象参数传递给查询(第一种情况post,第二种情况tag)。

    谢谢你,编码愉快!