Peguei umas apostilas de JPA e li alguns tutoriais na internet, mas estou ainda um pouco perdido com relação a disjunction e conjunction no JPA.
Pelo que eu entendi a conjuncao serve para agrupar condições com o "AND" do sql, já a disjuncao serve para agrupar condições com "OR". Estou certo? O material que pesquisei me parece muito confuso.
Tentei entao fazer o criteria gerar queries com o seguinte padrao:
WHERE (condicao1 = valor1 AND condicao2 = valor2) or (condicao3=valor3 and condicao4=valor4)
O que me deixou confuso é que quando crio uma nova conjuncao e adiciono duas condições a ela, apenas a segunda condição aparece dentro de parenteses. Nao entendi o criterio que leva o JPA a adicionar a segunda predict dentro de parenteses.
Ex:
Predicate conjuncao2 = criteriaBuilder.conjunction();
conjuncao2 = criteriaBuilder.and(conjuncao2,idIgual);
conjuncao2 = criteriaBuilder.and(conjuncao2,titularIgual);
Minha intenção com esse código seria gerar algo como :
WHERE 1=1 AND Conta.id = ? AND Conta.titular = ?
Entretanto, por algum motivo a minha conjuncao resulta em:
WHERE 1=1 AND Conta.id = ? AND (Conta.titular = ?)
Porque isso acontece? E se eu estivesse interessado em fazer condições compostas como :
WHERE (Conta.id = ? and Conta.titular = ?) AND (Conta.banco = ? and Conta.titular = ?)