如何解决给定另一个表中的朋友关系,从 Hibernate 获取对象列表
我将 this post 作为解决问题的尝试的一部分,尽管最终产品的计算成本非常高。
我有以下实体(为简单起见被截断)
@Entity
public Post {
@Id
private Long id;
@ManyToOne
private Person author;
private String post;
@Temporal(TemporalType.TIMESTAMP)
private Date postDate;
//getter setters
}
@Entity
public Person {
@Id
private Long id;
private String name;
//getter setters
}
@Entity
public Friendship {
@Id
private Long id;
@ManyToOne
private Person owner;
@ManyToOne
private Person friend;
//getter setters
}
我正在尝试获取某个用户及其朋友的最新帖子。用户查询很简单,如下所示:
Query query = em.createquery("SELECT p FROM Post p WHERE p.author = :user ORDER BY p.postDate DESC);
query.setParameter("user",user);
query.setMaxResults(50)
return query.getResultList();
然而,通过单一查询获得好友和用户的帖子列表似乎是不可能的。我的最大努力尝试是按照上面的消息为每个朋友重复(即:从朋友表中获取朋友,这也相当简单),然后再次按发布日期对合并列表进行排序,这是我想要避免的因为它真的很慢。
示例代码
Query q1 = em.createquery("SELECT F from Friendship f WHERE p.owner = :user or p.friend = :user");
q1.setParameter("user",user);
List<Friendship> friendshipList = q1.getResultList();
List<Person> friends = new ArrayList<>();
friends.add(user);
for (Friendship f : friendshipList) {
if (f.owner.equals(user)) {
friends.add(f.getFriend());
} else {
friends.add(f.getowner());
}
}
List<Post> result = new ArrayList<>();
for (Person p : friends) {
Query query = em.createquery("SELECT p FROM Post p WHERE p.author = :user ORDER BY p.postDate DESC");
query.setParameter("user",p);
query.setMaxResults(50)
result.addAll(query.getResultList());
}
//sort by date and return
有没有办法改进这个解决方案?
解决方法
你可以使用
SELECT DISTINCT p FROM Post p
WHERE p.author IN
(SELECT f.owner from Friendship f WHERE f.owner = :user or f.friend = :user)
OR
p.author IN
(SELECT f.friend from Friendship f WHERE f.owner = :user or f.friend = :user)
ORDER BY p.postDate DESC
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。