所以我有这段代码:
public List<FooRequirement> findByFoo(Foo foo) {
return getCurrentSession().createQuery("select distinct fr.foo from FooBarRequirement fr where fr.Foo.id = :FooId")
.setParameter("FooId", foo.getId()).list();
}
我在代码中的某处使用
调用此代码List<FooRequirement> myList = dao.findByFoo(foo);
然后我得到了一个ClassCastException,并想知道我做错了什么。我调试了我的代码,我看到我的列表(myList)应该包含类型为FooRequirement对象的引用实际上填充了类型为Foo的引用。
然后我发现了我的错误:
return getCurrentSession().createQuery("select distinct fr from FooBarRequirement fr where fr.Foo.id = :FooId"
有一个“选择不同的fr.foo”但它应该是“选择不同的fr ...”因为我想要一个FooRequirements列表而不是Foos 。
我的问题是,该引用是如何首先进入列表的?我的意思是List怎么可能举行foo?
有关课程的一些信息:
所有类都是实体,db有表格。
Foo类有一个字段ID和描述。
FooRequirement类是一个ABSTRACT类,它引用了Foo(ManyToOne)和id。 FooRequirement不会扩展Foo。
FooBarRequirement类扩展了一个FooRequirement类,如果它是相关的。它有一个字段Baz。 (多对一)
我希望问题很清楚。实际上情况有点复杂但我尽量让它尽可能简单。
答案 0 :(得分:2)
您正在查询select distinct fr.foo...
所以这是最终在List
。
编辑:您已将要包含的列表定义为List<FooRequirement>
。但是,您从Session
获得的结果列表未输入,因此可以在您的实例中保留任何Object
- Foo
。
由于您无法从休眠TypedQuery
获取Session
,因此您可以考虑使用EntityManager
interface。