我想從 JPA findBy 方法創建一個 JPA 查詢
select * from somTable where Col1 =1
and (col2 > 0 or col2 = 0)
and (col3 > 0 or col3 = 0)
and (col4 >0 or col4 =0)
and (col5 >0 or col5 =0)
uj5u.com熱心網友回復:
有多種方法可以解決
的
Spring Data JPA方式,使用@Query和命名引數:public interface SomeTableRepository extends JpaRepository<SomeTable, Long> { @Query("SELECT t FROM SomeTable t WHERE t.col1 = :col1 AND t.col2 >= :col2 AND t.col3 >= :col3") List<SomeTable> findAllByCol(@Param("col1") int col1, @Param("col2") int col2, @Param("col3") int col3); }的
JPA方式,使用JPA Criteria Queries:@Repository @Transactional public class SomeTableJpaRepository { @PersistenceContext EntityManager entityManager; public List<SomeTable> findAll(int col1, int col2, int col3, int col4, int col5) { CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<SomeTable> criteriaQuery = criteriaBuilder.createQuery(SomeTable.class); Root<SomeTable> itemRoot = criteriaQuery.from(SomeTable.class); List<Predicate> predicates = new ArrayList<>(); Predicate predicateCol1 = criteriaBuilder.equal(itemRoot.get("col1"), col1); predicates.add(predicateCol1); Predicate predicateCol2 = criteriaBuilder.greaterThanOrEqualTo(itemRoot.get("col2"), col2); predicates.add(predicateCol2); Predicate predicateCol3 = criteriaBuilder.greaterThanOrEqualTo(itemRoot.get("col3"), col3); predicates.add(predicateCol3); // ... criteriaQuery.select(itemRoot).where(predicates.toArray(new Predicate[]{})); return entityManager.createQuery(criteriaQuery).getResultList(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/352575.html
