2010-11-30 22 views
4

Comment puis-je exprimer l'instruction SQL suivante dans JPQL:multiples dans des conditions dans JPQL

select * from table where 
((table.col1 , table.col2) in 
    (col1val1, col2val1), 
    (col1val2, col2val2), 
    (col1val3, col2val3) 
) 

BTW: Ce qui précède est valide syntaxe Oracle SQL

Répondre

0

Edit: Oubliez ce qui suit, ce n'est pas correct. Gauche pour montrer la pensée

Je pense que vous auriez d'abord de diviser la déclaration multidimensionnelle dans elle est des constituants:

select * from table 
where table.col1 in (col1val1, col1val2, col1val3) 
and table.col2 in (col2val1, col2val2, col2val3) 

qui se traduirait en JPQL (en supposant que « table » est mise en correspondance une entité TableDto) comme ceci:

select tableDto from TableDto tableDto 
where tableDto.col1 in(col1val1, col1val2, col1val3) 
and tableDto.col2 in(col2val1, col2val2, col2val3) 

ce qui précède est non testé, mais d'autres informations peuvent être trouvées dans le JPQL reference documentation.

+0

Le problème est que cette requête va correspondre (col1val1, col2val2), ce que l'original ne sera pas. –

+0

@Tom Anderson Oui, vous avez raison. J'ai modifié en conséquence. –

1

Mon JPQL est terrible, mais que diriez-vous quelque chose comme:

select tableDto from TableDto tableDto 
where (tableDto.col1 = col1val1 and tableDto.col2 = col2val1) 
or (tableDto.col1 = col1val2 and tableDto.col2 = col2val2) 
or (tableDto.col1 = col1val3 and tableDto.col2 = col2val3) 

Ce n'est pas assez.