休眠-公式-无效查询

时间:2020-08-03 13:32:32

标签: java hibernate formula

我有一个关于休眠公式的问题。

让我们假设我有一个实体“车库”,其中有许多“汽车”。现在,我想在汽车类中添加一个属性,告诉我它在车库中有多少辆汽车。

我在汽车课上创建了这个公式:

@Formula("(SELECT pos FROM (SELECT rownum AS pos, c.id FROM garage g "
+ "LEFT JOIN car c ON g.id = c.garage_id "
+ "WHERE g.id = GARAGE_ID "
+ "ORDER BY c.date) WHERE id = CAR_ID)")

实体汽车具有两个属性(ID和GARAGE_ID)。我现在如何将它们合并到公式中?

此外,我还有一个问题,就是Hibernate总是从中生成一个无效的SQL。

Pos变为query0_.pos。但是,这是无效的。

1 个答案:

答案 0 :(得分:1)

@Formula批注中包含SQL片段的规则是,任何“裸”(不合格)列引用都将由该公式所属的实体的别名来限定。

例如,在此@Formula中:

@Formula("(select upper(isbn) || ' ' || upper(a.name) from authors a where a.id=author_id)")

将要连接到限定词的列是isbnauthor_id

所以在您的示例中:

  • 您应在pos中添加一个限定词以禁止这种行为,但是
  • 您应该保留idgarage_id的资格,因为它们属于汽车实体。

但是,您的代码中似乎有些混乱。您为什么要重新加入此处的car表?看起来不太正确。