Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从两个或多个组中检索前N个对象 背景资料:_Java_Sql_Hibernate - Fatal编程技术网

Java 从两个或多个组中检索前N个对象 背景资料:

Java 从两个或多个组中检索前N个对象 背景资料:,java,sql,hibernate,Java,Sql,Hibernate,我们的web应用程序(一种社交网络)允许用户向系统添加图库和文档。库由库类表示,并使用适当的hibernate映射进行映射-文档也是如此。两个类都包含creationDate字段 问题 实现一个新闻系统(类似于Facebook的主页),我需要能够同时从两个类中检索第一个N结果(由creationDate排序) 使用hibernate标准我很清楚如何从每个类中获得前N个结果,但这不是我想要的。我可以这样做,然后排序,但它似乎不是很有效 例子: 具有: Gallery 1 - 12/09/13 10

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

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

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

请求第一个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

您将如何实现这样的功能?

我在这类场景中使用的一种策略是创建一个合并两个表的视图

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

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

create table DOCUMENT(
    GALLERY_ID INT,
    NAME VARCHAR2(20),
    CREATION_DT
);
该视图类似于(Psuedo代码):


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

这似乎非常有趣和合适。视图将在wepApp之外独立地在sql中创建(使用工具作为PgAdmin)?@enOn是的,视图将在数据库中创建,独立于应用程序。您可以使用您选择的DBMS工具来澄清:在获得V_新闻项目的列表后,我必须以通常的方式通过id查询来检索其余的类数据(例如文档也包含描述)?或者您建议将所有相关数据直接包含在视图中?@enOn如果两个类之间有共同的元素,请将它们包含在视图中,否则按您建议的id查询它们。
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