java - 在 JpaRepository 中使用本机查询时出现 org.hibernate.exception.SQLGrammarException 问题?
问题描述
SQLGrammarException
使用以下代码时出现异常
请检查我的存储库类,如下所示
package repository;
package repository;
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 entity.UserInfo;
@Repository
public interface UserRepository extends JpaRepository<UserInfo, Integer> {
@Query("select u from UserInfo u")
public List<UserInfo> getAllUsers();
/// I AM GETTING THE ISSUE IN THE FOLLOWING QUERY WHICH ARE AS BELOW
@Query(value = "select u From UserInfo u WHERE u.name= :n",nativeQuery = true)
public List<UserInfo> getUserByName(@Param("n") String name);
}
现在请检查我的服务等级如下
package service;
import java.util.List;
import javax.transaction.Transactional;
import javax.transaction.Transactional.TxType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.learning.sql_learning.SqlLearningApplication;
import entity.PaymentInfo;
import entity.UserInfo;
import repository.PaymentRepository;
import repository.UserRepository;
import transaction.MyExcecption;
import transaction.RequestUser;
import transaction.UserAcknowlegment;
@Service
public class TransactionService {
private static final Logger logger = LoggerFactory.getLogger(SqlLearningApplication.class);
@Autowired
private UserRepository userRepository;
public List<UserInfo> getAllUsers() {
// TODO Auto-generated method stub
return userRepository.getAllUsers();
}
public List<UserInfo> getUserByName(String name) {
return userRepository.getUserByName(name);
}
}
请检查我的包含记录的数据库。
我在 SO 中搜索过,但没有得到正确的解决方案,在 SO 中有同样的问题,但对我不起作用,请帮助我
getUserByName()
运行其余 API时出现以下异常
internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)\r\n\t... 94 more\r\n", "message": "could not extract ResultSet; SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: could not extract ResultSet", "path": "/getUserByName" }
解决方案
这不是有效的 nativeQuery。
那将是正确的 nativeQuery:
@Query(value = "select * From UserInfo u WHERE u.name= :n",nativeQuery = true)
List<UserInfo> getUserByName(@Param("n") String name);
但我怀疑您是否真的想要执行本机查询 (SQL) 而不是 JPQL 查询。所以你可以删除 nativeQuery=true
@Query(value = "select u From UserInfo u WHERE u.name= :n")
List<UserInfo> getUserByName(@Param("n") String name);
现在这个查询可以由 Spring Data JPA 生成,所以你根本不需要查询:
List<UserInfo> findByName(String name);
推荐阅读
- ruby-on-rails - Rails 5:使用带有参数的 form_with 预填充搜索表单输入,而无需为每个字段手动执行
- javascript - Vue。当 Vuex 存储中的值被修改时,将焦点设置在组件的输入上
- java - 选择选项卡时创建每个类的实例 (JTabbedPane)
- ruby-on-rails - Ruby on Rails:从图像请求中剥离文件扩展名并重定向到 404
- html - 未捕获的错误:无法使用带有 p5 和 html 的 MathJax 从给定数据进行回调
- react-native - react-native-elements,帮助在 FormInput 中居中输入文本
- python - Matplotlib 不知从何处绘制未定义的图
- python - 通过引发 404 来保护页面
- javascript - mongodb - 聚合游标计数
- python - 如何使用函数更改返回函数/更改变量?