这两个都有效:
OrmExecuteQuery("FROM Person WHERE Company = 1",[]);
OrmExecuteQuery("FROM Person WHERE companyID = 1",[]);
“Company”是属性名称,引用“Company”实体,而“companyID”是列名称(链接到自动增量 PK 的 FK)。
但是,我尝试做的事情更复杂 - 它涉及联接,并且需要使用别名。
所以我用别名更新这两个查询...
OrmExecuteQuery("FROM Person AS BaseEntity WHERE BaseEntity.Company = 1",[]);
OrmExecuteQuery("FROM Person AS BaseEntity WHERE BaseEntity.companyID = 1",[]);
第一个仍然有效,第二个抛出错误:
Error while executing the Hibernate query.
org.hibernate.QueryException: could not resolve property: companyID of: Person
我不知道为什么这两个非别名版本都能工作。
当然,如果我可以简单地使用带有别名的属性名称,那就没问题了,但是当我将参数添加到组合中时(因为硬编码值没有那么有用)...
OrmExecuteQuery("FROM Person WHERE Company = ?",[1]);
OrmExecuteQuery("FROM Person WHERE companyID = ?",[1]);
OrmExecuteQuery("FROM Person AS BaseEntity WHERE BaseEntity.Company = ?",[1]);
OrmExecuteQuery("FROM Person AS BaseEntity WHERE BaseEntity.companyID = ?",[1]);
...这四个都失败了。
最后一个给出与上面相同的错误。
第一个和第三个都给出错误:
You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members.
我假设这是因为 CF 试图将数字 id 视为一个实体。
第二个是 CF/Hibernate 典型的无用 self :一个没有详细信息的 java.lang.NullPointerException 错误。
有没有办法允许将数字 ID 作为参数提供给 Hibernate?
最佳答案
解决方案似乎是引用 Company 的 companyID 属性而不是 Person 的 companyID 列,即:
OrmExecuteQuery("FROM Person AS BaseEntity WHERE BaseEntity.Company.companyID = ?",[1]);
相同的形式也可以在没有别名的情况下使用:
OrmExecuteQuery("FROM Person WHERE Company.companyID = ?",[1]);
关于hibernate - HQL语句中外键的数字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21940683/