设置
我的数据库 View 有问题。我们使用 Java 7、Google Guice、Hibernate 5.1.0.Final、liquibase 3.5.3 和 HSQLDB 2.3.4。 我们解析几个文件并将数据保存到 hsqldb(文件模式)。然后,我们使用两个 View 的组合来收集文件导出的数据。
问题
所以我遇到的问题如下: 与之后打开 hsqldb 相比,我们的 select 查询将在运行时为我们提供不同的结果。 This is the problem simplified:
观看次数
这些与我们使用的 View 类似(但更加简化):
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
查询
我们对第二个 View 执行查询:
TypedQuery<ViewEntity> query = entityManager.get().createQuery("select v from ViewEntity v", VerwendungGeoPosEntity.class);
表出现次数
我将跳过 IDENTIFIER 因为在我的问题中数据是不相关的。就我而言,所有情况下的 IDENTIFIER 数据都是相同的。我包含了第一个 View ,以防万一 View 包含 View 可能是问题的原因。
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
有人遇到过这个问题吗?我将非常感谢您的帮助。
最佳答案
我发现了问题。
虽然在 persistence.xml 中所有表的实体都没有 View COMBINED_2 的实体。 :$
将实体添加到上下文后,一切正常。
运行时未发现任何问题。但是,当我为这种特殊情况创建 JUnit 测试时,我收到一条消息,该实体未映射。
关于java - HSQLDB View (INNER-JOIN)在运行时出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44926297/