mpo*_*llo 5 nhibernate hibernate hql
我有两个HQL查询用于快速和脏的单元测试.第一个看起来有点像这样:
from Foo where SOME_FOREIGN_KEY = 42
Run Code Online (Sandbox Code Playgroud)
第二个看起来像这样:
from Foo as foo
inner join foo.Bar as bar
where foo.SOME_FOREIGN_KEY = 42
Run Code Online (Sandbox Code Playgroud)
SOME_FOREIGN_KEY列不是Hibernate知道的映射名称.
出于某种原因,第一个HQL查询起作用,但第二个不起作用.
我的目标是让第二个版本工作,而无需将对象图遍历到外键标识的对象.对于此测试,我有一个已知的ID,我只想要与该ID相关的对象.关系另一端的对象本身是无关紧要的.这可能吗?
Pas*_*ent 11
出于某种原因,第一个HQL查询起作用,但第二个不起作用.
当您在WHEREHQL查询的子句中使用Hibernate不知道的内容时(例如,未在SQL方言中注册的函数),Hibernate会巧妙地将其直接传递给数据库.
换句话说,假设Foo被映射TABLE_FOO,以下HQL
from Foo where SOME_FOREIGN_KEY = 42
Run Code Online (Sandbox Code Playgroud)
被翻译成以下SQL
SELECT FROM TABLE_FOO WHERE SOME_FOREIGN_KEY = 42
Run Code Online (Sandbox Code Playgroud)
如果TABLE_FOO实际上有一SOME_FOREIGN_KEY列,则可以工作.
但是,在使用第二个示例中的别名时:
from Foo as foo where foo.SOME_FOREIGN_KEY = 42
Run Code Online (Sandbox Code Playgroud)
Hibernate试图解决SOME_FOREIGN_KEY的一个属性的的Foo实体,这显然会失败.
我的目标是让第二个版本工作,而无需将对象图遍历到外键标识的对象.
如果您在列前添加别名,则不会.所以以下应该有效:
from Foo as foo
inner join foo.Bar as bar
where SOME_FOREIGN_KEY = 42
Run Code Online (Sandbox Code Playgroud)
但老实说,我不明白为什么你不想使用路径表达式,我建议不要使用上面的解决方案.HQL的一个重点是抽象表名和列名,你将在这里完全击败这个目标.
| 归档时间: |
|
| 查看次数: |
5081 次 |
| 最近记录: |