我正在使用 Spring Data JPA 开发 Spring Boot 应用程序,并且我正在尝试创建一个存储库方法,该方法根据指定类别从问题表中检索随机问题列表。我尝试使用 @Query 注释来实现此目的,但遇到错误。
这是代码:
package com.example.dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.example.model.Question;
@Repository
public interface QuestionDao extends JpaRepository<Question, Integer> {
List<Question> findByCategory(String category);
@Query(value = "SELECT q.id FROM question q Where q.category=:category ORDER BY RAND() LIMIT :numQ", nativeQuery = true)
List<Integer> findRandomQuestionsByCategory(String category, int numQ);
}
错误: MySQL:输入“SELECT * FROM Question q WHERE q.category = :category ORDER BY RAND() LIMIT :”没有可行的替代方案
我尝试过的: 我使用 ORDER BY RANDOM() 但为了 MySQL 兼容性而改用 ORDER BY RAND()。
我期待什么: 一种有效的 JPA 存储库方法,可根据给定类别从问题表中检索指定数量的随机问题。
您无法像您所做的那样将占位符绑定到
LIMIT
子句。 您可以做的是提供findRandomQuestionsByCategory()
方法的实现,并使用JPA存储库方法来强制限制结果集的大小。
@Override
public List<Passenger> findRandomQuestionsByCategory(String category, int limit) {
String sql = "SELECT q.id FROM question q WHERE q.category = :category ORDER BY RAND()";
return entityManager.createQuery(sql, Integer.class)
.setMaxResults(limit)
.getResultList();
}