我正在尝试使用HQL查询两个域之间新创建的关系。
所以我想做类似的事情:
select x.id, y.id
from Author as x
join x.books as y
where (x.id, y.id) not in ((1,2),(3,4))
或
select x.id, y.id
from Author as x
join x.books as y
where (x.id, y.id) not in (:existingTuples)
所以现有的元组是我已经知道的相关ID。我希望看到,已经建立了哪些关系。 我知道可以用SQL做到这一点,但是对于HQL我不必关心,如果它是1-1,1-n或n-m。
如果我直接在HQL中输入ID,我会收到此错误:
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: {vector}
如果我提供
一个字符串for:existingTuples,如'(1,2),(3,4)'或
org.apache.commons.lang3.tuple.Pair的列表,如[new ImmutablePair(1L,2L),..]或
像[[1,2],[3,4]]
这样的列表我收到此错误
org.hibernate.util.JDBCExceptionReporter.logExceptions([...]) at Line 234
ERROR: arguments of row IN must all be row expressions
我还检查了spylog,查询永远不会被执行,生成的SQL看起来像这样:
select author0_.id as col_0_0_, books1_.id as col_1_0_
from author author0_
inner join book books1_ on author0_.id=books1_.author_id
where (author0_.id , books1_.id) not in (?)
如果我接受这个查询并且只是添加((1,2),(3,4))它就可以了。
任何人都知道如何格式化HQL,或者我必须以哪种形式提供idTuples,以便它们是行元素?