2012-01-05 49 views
4

我有三个表/类,我正在用左外连接提取。我执行以下查询:当使用createSQLQuery()连接表时,Hibernate可以返回空对象吗?

List<Object[]> l = session.createSQLQuery("SELECT a.*, b.*, c.* " + 
    " FROM (table_a a INNER JOIN table_b b ON a.some_id = b.some_id) " + 
    " LEFT OUTER JOIN table_c c ON c.some_id = a.some_id" 
).addEntity("a", A.class).addEntity("b", B.class).addEntity("c", C.class).list(); 

查询时存在于A和B的行但在C中没有相应的列,如休眠试图用C分配到非空属性空值(I失败不能将这些属性更改为可空)。如果C中的某行不存在,而不是尝试创建一个空值对象,那么在Hibernate中是否有一个设置为C返回空对象?

+0

http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies。你有没有试过设置'lazy = true'?不确定,如果这有帮助。 – 2012-01-05 22:19:48

+0

我正面临类似的问题。你有没有找到解决方案? – jabclab 2012-08-30 11:49:08

回答

0

如果我不明白错误。无论如何,如果c为null或不为空,则试图获得结果。

你可以将它添加到WHERE子句是这样的:

and ((c.name=1234 and c.price=1234) or c.id is null) 
相关问题