我有一个关于休眠公式的问题。
让我们假设我有一个实体“车库”,其中有许多“汽车”。现在,我想在汽车类中添加一个属性,告诉我它在车库中有多少辆汽车。
我在汽车课上创建了这个公式:
@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。但是,这是无效的。
答案 0 :(得分:1)
在@Formula
批注中包含SQL片段的规则是,任何“裸”(不合格)列引用都将由该公式所属的实体的别名来限定。
例如,在此@Formula
中:
@Formula("(select upper(isbn) || ' ' || upper(a.name) from authors a where a.id=author_id)")
将要连接到限定词的列是isbn
和author_id
。
所以在您的示例中:
pos
中添加一个限定词以禁止这种行为,但是id
和garage_id
的资格,因为它们属于汽车实体。但是,您的代码中似乎有些混乱。您为什么要重新加入此处的car
表?看起来不太正确。