Spring JPARepository中如何查询唯一列值而非实体?能否避免原生查询?
无需原生查询实现distinct产品类型查询
当然可以不用原生查询,有两种简洁的实现方式:
方式一:利用Spring Data JPA方法命名规则
直接在仓库接口中按规则定义方法,Spring Data JPA会自动生成对应的JPQL查询,无需手动编写SQL或JPQL:
public interface MyProductRepository extends JpaRepository<MyProduct, Long> { // 两种写法都可行,推荐第二种更符合命名规范 List<String> findDistinctProdType(); // List<String> findDistinctByProdType(); }
这个方法会被解析为JPQL:SELECT DISTINCT m.prodType FROM MyProduct m,和你之前的原生查询效果完全一致。
方式二:使用JPQL查询
通过@Query注解编写面向实体的JPQL语句,不指定nativeQuery=true:
public interface MyProductRepository extends JpaRepository<MyProduct, Long> { @Query("SELECT DISTINCT m.prodType FROM MyProduct m") List<String> findDistinctProdTypes(); }
这种方式用实体类名MyProduct和属性名prodType替代数据库表名和列名,更贴合JPA的面向对象设计,也避免了和特定数据库语法绑定。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

