HQL query for id pairs / tuples

2019-05-05 10:49发布

I am trying to query for newly created relations between two domains using HQL.

So I want to do something similar to this:

         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))

or

         select x.id, y.id
         from Author as x
          join x.books as y
         where (x.id, y.id) not in (:existingTuples)

So existingTuples are the related IDs that I already know. And I would like to see, which relations have been created. I know it's possible to do it with SQL, but with HQL I would not have to care about, if it's 1-1, 1-n or n-m.

If I am typing the IDs directly in the HQL i get this error:

org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: {vector}

If I am providing

a String for :existingTuples like '(1,2),(3,4)', or

a List of org.apache.commons.lang3.tuple.Pair like [new ImmutablePair(1L,2L), ..], or

a List of List like [[1,2],[3,4]]

I get this error

org.hibernate.util.JDBCExceptionReporter.logExceptions([...]) at Line 234
ERROR: arguments of row IN must all be row expressions

I also checked with spylog, the query does never get executed, the generated SQL looks like this:

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  (?)

If I take this query and just add not in ((1,2), (3,4)) it works.

Anyone has a clue how to format the HQL, or in which form I would have to provide the idTuples, so that they are row elements?

标签: hibernate hql
0条回答
登录 后发表回答