Java @查询批注未读取本机sql select*spring数据 public interface consumerepository扩展了crudepository{ 列出findByLastName(字符串lastName); 列出findByFirstName(字符串名); //列表readExistsFirstName(字符串firstName); //列出GetByFirstName和LastNameOrderByFirstName(); //集合findById(长id); @查询(“从使用者中选择c作为c,其中c.firstName类似“%”1%”) 集合findByNameContains(字符串字); @查询(value=“从ppc\U消费者中选择ppc\U消费者,其中lastname=?1”, countQuery=“从ppc_消费者中选择count(*),其中lastname=?1”, nativeQuery=true) PageFindBylastName(字符串lastname,可分页); }

Java @查询批注未读取本机sql select*spring数据 public interface consumerepository扩展了crudepository{ 列出findByLastName(字符串lastName); 列出findByFirstName(字符串名); //列表readExistsFirstName(字符串firstName); //列出GetByFirstName和LastNameOrderByFirstName(); //集合findById(长id); @查询(“从使用者中选择c作为c,其中c.firstName类似“%”1%”) 集合findByNameContains(字符串字); @查询(value=“从ppc\U消费者中选择ppc\U消费者,其中lastname=?1”, countQuery=“从ppc_消费者中选择count(*),其中lastname=?1”, nativeQuery=true) PageFindBylastName(字符串lastname,可分页); },java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,但是显示错误“Distinc expected”,因为我在@Query注释中使用了*而得到了*?有什么问题吗?您不能使用*在spring jpa中,您必须使用别名。试着这样做: public interface ConsumerRepository extends CrudRepository<Consumer, Long> { List<Consumer> findByLastName(String lastName); List<Consum

但是显示错误“Distinc expected”,因为我在@Query注释中使用了*而得到了*?有什么问题吗?

您不能使用*在spring jpa中,您必须使用别名。试着这样做:

public interface ConsumerRepository extends CrudRepository<Consumer, Long>  {

    List<Consumer> findByLastName(String lastName);
    List<Consumer> findByFirstName(String firstName);

    //List<Consumer> readExistsFirstName(String firstName);
    //List<Consumer> getByFirstNameAndLastNameOrderByFirstName();
    //Collection<Consumer> findById(Long id);
    @Query("select c from Consumer as c where c.firstName like '%?1%'")
    Collection<Consumer> findByNameContains(String word);

    @Query(value = "SELECT ppc_consumer FROM ppc_consumer WHERE lastname = ?1",
            countQuery = "SELECT count(*) FROM ppc_consumer WHERE lastname = ?1",
            nativeQuery = true)
    Page<Consumer> findByLastname(String lastname, Pageable pageable);
 }
有关更多信息,请参见此问题


让我们按照下面的例子来做-

@Query(value = "SELECT ppc FROM ppc_consumer ppc WHERE ppc.lastname = ?1",
            countQuery = "SELECT count(ppc) FROM ppc_consumer ppc WHERE ppc.lastname = ?1")
用另一种方法代替*:

@Query(value = "SELECT * FROM consumer WHERE lastname = :lastName  LIMIT :maxRecord", nativeQuery = true)
StickerProduct findWalletProduct(@Param("lastName") String lastName, @Param("maxRecord") Long maxRecord);

我希望它能起作用。谢谢

为什么要在此处使用本机查询?你实际上可以直接获取ppc_消费者记录,对吗?你能详细说明一下吗?你问我一个问题吗?我需要回答这是因为
nativeQuery=true
命令。我编辑了答案,我尝试删除了它,它对我很有效。您的示例也非常有效,但您也可以添加*示例:)
@Query(value = "SELECT c FROM consumer c WHERE lastname = :lastName  LIMIT :maxRecord", nativeQuery = true)
StickerProduct findWalletProduct(@Param("lastName") String lastName, @Param("maxRecord") Long maxRecord);