我有一些SQL
select id, name from table where id = '1' and name = 'A'
or id = '2' and name = 'B'
or id = '3' and name = 'C';
SQL的结果让我满意,但无论如何我必须将该SQL映射到JPA的Predicates。
我现在拥有什么
List<Predicate> predicates = new ArrayList<>();
Predicate id1 = criteriaBuilder.like(root.get(id), "%" + "1" + "%");
predicates.add(criteriaBuilder.and(id1));
Predicate nameA = criteriaBuilder.like(root.get(name), "%" + "A" + "%");
predicates.add(criteriaBuilder.and(nameA));
Predicate id2 = criteriaBuilder.like(root.get(id), "%" + "2" + "%");
predicates.add(criteriaBuilder.and(id2));
Predicate name2 = criteriaBuilder.like(root.get(name), "%" + "B" + "%");
predicates.add(criteriaBuilder.and(name2));
Predicate id3 = criteriaBuilder.like(root.get(id), "%" + "3" + "%");
predicates.add(criteriaBuilder.and(id3));
Predicate name3 = criteriaBuilder.like(root.get(name), "%" + "C" + "%");
predicates.add(criteriaBuilder.and(name3));
query.where(criteriaBuilder.or(predicates.toArray(new Predicate[predicates.size()])));
return entityManager.createQuery(query).getResultList();
查询谓词还返回一些冗余数据,但SQL查询除外。
请更正我的谓词条件,以获得与sql查询相同的结果。
非常感谢!
答案 0 :(得分:1)
我会写点什么:
var table = $('#example').DataTable({
"columnDefs": [
{ "type": "natural", targets: 0 },
{ "type": "natural", targets: 1 }
]
});
无论如何喜欢与 = 不同,所以它可以解决这个问题。
如果您的jpa实现是Hibernate,您可以通过在 persistence.xml
中添加以下代码行来向控制台显示sql
Predicate id1 = criteriaBuilder.like(root.get(id), "%" + "1" + "%");
Predicate nameA = criteriaBuilder.like(root.get(name), "%" + "A" + "%");
Predicate id1nameA = criteriaBuilder.and(id1,nameA);
predicates.add(criteriaBuilder.or(id1nameA));
//...continue for the others