I have two tables named as table1 ,table2.Both the tables are having same no of fields.There is no relation between these two tables.My requirement is I want all the records in table1 which are not there in table2. So I have written a query using Criteria API. But it is not giving the correct result. As I am new to this JPA and criteria API, can any one point me where I am doing wrong.The below code I am using to do this.
CriteriaBuilder cb = mediationEntityManager.getCriteriaBuilder();
CriteriaQuery<Table1> cq = cb.createQuery(Table1.class);
Root<Table1> table1 = cq.from(Table1.class);
cq.select(table1)
Subquery<Table2> subquery = cq.subquery(Table2.class)
Root table2 = subquery.from(Table2.class)
subquery.select(table2)
cq.where(cb.not(cb.exists(subquery)))
TypedQuery<Table1> typedQuery = mediationEntityManager.createQuery(cq);
List<Table1> resultList = typedQuery.getResultList();
MySQL Query :
SELECT table1
FROM table1 table1
WHERE NOT EXISTS (SELECT table2
FROM table2 table2
WHERE table2.name = table1.name
AND table2.education = table1.education
AND table2.age = table1.age)
AND table1.name = 'san'
AND table1.age = '10';
I need the JPA criteria API query for the above mentioned MySQL query.
You can try the below code with Criteria API. I haven't tried, but you can try modifying the code accordingly.
Also, you can try below JPQL query, which is more easier to understand, alter & debug.