HSQLDB 视图 (INNER-JOIN) 在运行时出错

Posted

技术标签:

【中文标题】HSQLDB 视图 (INNER-JOIN) 在运行时出错【英文标题】:HSQLDB View (INNER-JOIN) faulty during runtime 【发布时间】:2017-07-05 12:27:57 【问题描述】:

设置

我的数据库视图有问题。我们正在使用 Java 7、Google Guice、Hibernate 5.1.0.Final、liquibase 3.5.3 和 HSQLDB 2.3.4。 我们解析几个文件并将数据保存到 hsqldb(文件模式)。然后我们使用两个视图的组合来为我们的文件导出收集数据。

问题

所以我遇到的问题如下: 与之后打开 hsqldb 相比,我们的选择查询将在运行时给我们不同的结果。 This is the problem simplified:

观看次数

这些与我们使用的视图相似(但大大简化):

CREATE VIEW COMBINED AS
SELECT i.ID, o.* 
FROM 
    OCCURRENCE o
    JOIN IDENTIFIER i ON o.REF_IDENTIFIER_REVISION = i.ID


CREATE VIEW COMBINED_2 AS
SELECT
    combinedView.ID_OCCURRENCE as ID_PARENT,
    combinedChild.ID_OCCURRENCE as ID_CHILD,
    ConfData.DATA,
FROM 
    COMBINED combinedView
    INNER JOIN CONF_DATA ConfData ON ConfData.ID = combinedView.ID_PARENT
    JOIN OCCURRENCE combinedChild ON combinedView.ID_OCCURRENCE = combinedChild.REF_PARENTOCCURRENCE

查询

我们对第二个视图执行查询:

TypedQuery<ViewEntity> query = entityManager.get().createQuery("select v from ViewEntity v", VerwendungGeoPosEntity.class);

表发生率

我将跳过 IDENTIFIER,因为在我的问题中数据是无关紧要的。在我的情况下,IDENTIFIER 的数据对于所有情况都是相同的。我包括了第一个视图,以防万一包含视图的视图可能是问题的原因。

ID     | NAME
------ | ------
1      | Parent 1
2      | Child 1

表CONF_DATA

ID     | DATA
------ | ------
1      | Parent Data 1 
2      | Parent Data 2

运行时查看

ID_PARENT | ID_CHILD | DATA
------    | ------   | ------
1         | 2        | Parent Data 1
1         | 2        | Parent Data 1

运行后查看

ID_PARENT | ID_CHILD | DATA
------    | ------   | ------
1         | 2        | Parent Data 1
1         | 2        | Parent Data 2

以前有人遇到过这个问题吗?非常感谢您的帮助。

【问题讨论】:

如果视图在重启后没有返回相同的数据,则将 CREATE TABLE、数据以及 CREATE VIEW 和查询报告给 HSQLDB 项目。在这里问问题没有意义。 【参考方案1】:

我发现了问题。

虽然所有表的实体在 persistence.xml 中,但视图 COMBINED_2 的实体却没有。 :$

将实体添加到上下文后,一切正常。

在运行时未显示任何问题。但是,当我为这种特殊情况创建 JUnit 测试时,我收到一条消息,即实体未映射。

【讨论】:

以上是关于HSQLDB 视图 (INNER-JOIN) 在运行时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 hsqldb 2.2.9 中更新视图

hsqldb 中,如何指定数据库文件存放位置?

使用 HSQLDB 比较 Openoffice 数据库中的日期

SpringBoot 用户缺少权限或找不到对象 HSQLDB

从 intellij 14 查看 petclinic 应用程序的 hsqldb 内容

HSQLDB:如何指定可以找到带有 SQL/JRT 函数的 JAR 文件的位置?