gpt4 book ai didi

java - 从两个或多个组中检索前 N 个对象

转载 作者:行者123 更新时间:2023-12-01 14:07:47 24 4
gpt4 key购买 nike

背景信息:

我们的网络应用程序(一种社交网络)允许用户向系统添加图库文档。画廊由 Gallery 类表示,并使用适当的 hibernate 映射进行映射 - 文档也是如此。这两个类都包含一个creationDate字段。

问题

实现新闻系统(类似于Facebook的主页),我需要能够从两个类中检索前N个结果同时(按creationDate排序)。

使用 hibernate Criteria 我很清楚如何从每个类中获取前 N 个结果,但这不是我想要的。我可以这样做,然后对它们进行排序,但似乎效率不高。

示例:

拥有:

Gallery 1 - 12/09/13 10:10
Gallery 2 - 12/09/13 09:10
Gallery 3 - 12/09/13 08:20
Gallery 4 - 12/09/13 08:10

Document 1 - 12/09/13 08:25
Document 2 - 12/09/13 07:10
Document 3 - 12/09/13 06:15
Document 4 - 12/09/13 05:10

要求第一个 4 会给出:

Gallery 1 - 12/09/13 10:10
Gallery 2 - 12/09/13 09:10
Document 1 - 12/09/13 08:25
Gallery 3 - 12/09/13 08:20

您将如何实现这样的事情?

最佳答案

我针对此类场景使用的一个策略是创建一个联合两个表的 View 。

假设它们存储在数据库中,如下所示:

create table GALLERY(
GALLERY_ID INT,
NAME VARCHAR2(20),
CREATION_DT
);

create table DOCUMENT(
GALLERY_ID INT,
NAME VARCHAR2(20),
CREATION_DT
);

View 看起来像(伪代码):

CREATE OR REPLACE VIEW V_NEWS as 
select
GALLERY_ID as NEWS_ID
NAME,
CREATION_DT,
'GALLERY' as TYPE
from GALLERY
UNION
select
DOCUMENT_ID as NEWS_ID
NAME,
CREATION_DT,
'DOCUMENT' as TYPE
from DOCUMENT

现在将其作为应用程序中的类/实体,并与 Hibernate 进行适当的连接。在 ORM 中, View 映射就像表一样,唯一的区别是您不能插入 View ,除非您建立一些触发器(我不建议这样做)。似乎这个功能无论如何都是只读的,所以这不应该是一个问题。显然,您不想合并完整的表集,并且可能需要添加一个 where 子句,将 View 限制为特定用户和可能的日期范围。

关于java - 从两个或多个组中检索前 N 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18760350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com