hibernate - HQL语句中外键的数字参数

标签 hibernate coldfusion hql

这两个都有效:

 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/

相关文章:

java - org.Hibernate.AnnotationException : No Identifier Specified For Entity I don't have a id in my table

java - JPA:使用附加属性映射多对多关系

java - 使用 @JoinTable 的 Hibernate 一对多映射问题

coldfusion - 添加文字水印

java - 为什么更新记录的子项会删除与其子项的连接?

tomcat - 重命名 ColdFusion 10 JSESSIONID

java - 使用 Hibernate 映射到实体 id

java - 强制 Hibernate 查询访问数据库

java - Hibernate join 没有外键并且只映射一个表