HQL语句适用于持久性查询,而不适用于Hibernate @Formula

时间:2018-03-30 13:17:02

标签: hibernate jpa hql jpa-2.0

在Hibernate实体内部,我尝试使用@Formula

检索一组实体
@Formula(value = "SELECT entityA from EntityA entityA "
        + "INNER JOIN entityA.id listValue WHERE listValue.id   "
        + "in ( select entityB.listValueId from EntityB entityB  where entityB.companyId  "
        + "in ( select entityC.id from EntityC entityC where entityC.id = '162B7E74-713C-4565-AAD2-52EC57B07419') )")
private Set<EntityA> entityASet;

不幸的是,这会返回以下奇怪的错误:

  

org.jboss.logging.jboss-logging - 3.1.4.GA |表   'schema。 ENTITY_C_TABLE_ENTITY_A_TABLE '不存在

请注意, ENTITY_C_TABLE_ENTITY_A_TABLE 是EntityC(数据库表:ENTITY_C_TABLE),EntityA(数据库表ENTITY_A_TABLE)的组合名称,数据库中有这样的表

奇怪的是,当我使用以下代码执行完全相同的查询时,它会正确返回结果而没有错误:

String query = "SELECT entityA from EntityA entityA "
        + "INNER JOIN entityA.id listValue WHERE listValue.id   "
        + "in ( select entityB.listValueId from EntityB entityB  where entityB.companyId  "
        + "in ( select entityC.id from EntityC entityC where entityC.id = '162B7E74-713C-4565-AAD2-52EC57B07419') )";

Query qb = em.createQuery(query);
List<EntityA> resultList = qb.getResultList();

我很难理解为什么在公式中使用相同的HQL不起作用并生成如此奇怪的数据库表命名,而当单独执行时它返回结果。 我看到一些答案表明persistence.xml中有以下属性,但这并没有解决任何问题:

<property name="hibernate.hbm2ddl.auto" value="update" />

PS。我知道Hibernate 5.1允许连接到不相关的实体,但我使用较低版本,所以我不得不使用带有“where”子句的解决方案

0 个答案:

没有答案