在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”子句的解决方案