首页 > 解决方案 > 在 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" }

标签: javaspringspring-bootspring-data-jpa

解决方案


这不是有效的 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);

推荐阅读