【问题标题】:Hibernate - Formula - invalid Query休眠 - 公式 - 无效查询
【发布时间】:2020-08-03 13:32:32
【问题描述】:

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

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

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

@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。但是,这是无效的。

【问题讨论】:

    标签: java hibernate formula


    【解决方案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 表?这看起来不太对。

    【讨论】:

    • 感谢您的回复。上述情况仅作为示例。我需要在汽车类的车库中的位置。您可能有更好的主意 - 或简单的 SQL 语句 :)
    猜你喜欢
    • 2013-12-06
    • 2011-12-05
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多