我有3张表如下
Post
pid pname
TagPost
tagid postId postTime
Tag
tagid tagNam
一个帖子可以有多个标签,一个标签可以有多个帖子。基本上是一个n * n映射。
现在我如何使用session.createQuery()
java
作为其中一个标签的帖子?按邮政时间排序。这是以正确的方式模拟这种情况的表现吗?或者我应该有以下结构?
postid pname postTime tags
在这种情况下,标签列的值可以用逗号分隔。 标签的样本值column = java,hibernate
答案 0 :(得分:0)
考虑到所有情况,你的拳头设计有三张桌子是更好的。您可以有效地运行查询。这些类型的查询在HQL中非常常见。
要获得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
这个也很简单:
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
)。
谢谢你,编码愉快!