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 比较 Openoffice 数据库中的日期
SpringBoot 用户缺少权限或找不到对象 HSQLDB