0

背景资料:

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

问题

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

使用休眠标准我很清楚如何从每个类中获得前 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

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

4

1 回答 1

1

我在这种情况下使用的一种策略是创建一个合并两个表的视图。

因此,可以说它们存储在数据库中,例如:

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

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

该视图看起来像(伪代码):

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 中,视图映射就像表一样,唯一的区别是您不能插入视图,除非您建立一些触发器(我不推荐)。似乎这个功能无论如何都是只读的,所以这不应该是一个问题。显然,您不想合并完整的表集,可能需要添加一个 where 子句,将视图限制为特定用户和可能的日期范围。

于 2013-09-12T09:32:35.743 回答