首页 > 解决方案 > 无法提取结果集:休眠,oracle 数据库中的 SQL 语法异常

问题描述

请帮我解决这个问题。这是我的错误的堆栈跟踪。

Servlet.service() 用于路径 [] 上下文中的 servlet [dispatcherServlet] 引发异常 [请求处理失败;嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause

oracle.jdbc.OracleDatabaseException: ORA-00942: 表或视图不存在

这是employee.java 类。

package com.example.demo.model;


import javax.persistence.*;
import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name = "demo_employee1")

public class Employee implements Serializable {


    private static final long serialVersionUID = 2L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "s_employeeCreate")
    @SequenceGenerator(name = "s_employeeCreate", sequenceName = "s_employeeCreate", allocationSize = 1)
    @Column(name = "id", unique = true, nullable = false)
    private Long id;


    @Column(name = "first_name")
    private String firstName;

    @Column(name = "last_name")
    private String lastName;

    @Column(name = "email_address")
    private String email;

    @Column(name = "employee_DepartmentId")
    private String employeeDepartmentId;


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;

    }

    public String getEmployeeDepartmentId() {
        return employeeDepartmentId;
    }

    public void setEmployeeDepartmentId(String employeeDepartmentId) {
        this.employeeDepartmentId = employeeDepartmentId;
    }


}

这是 EmployeeDTO.java

package com.example.demo.DTO;

import com.fasterxml.jackson.annotation.JsonProperty;

import com.example.demo.model.Employee;

import org.springframework.beans.BeanUtils;

public class EmployeeDTO {

    @JsonProperty(value="id")
    private long id;

    @JsonProperty(value="firstName")
    private String firstName;

    @JsonProperty(value="lastName")
    private String lastName;


    @JsonProperty(value="email")
    private  String email;


    @JsonProperty(value="employeeDepartmentId")
    private String employeeDepartmentId;



    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        this.lastName = lastName;
    }
    public  String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmployeeDepartmentId(){
        return employeeDepartmentId;
    }

    public void setEmployeeDepartmentId(String employeeDepartmentId){
        this.employeeDepartmentId= employeeDepartmentId;
    }


    public static Employee valueOf(EmployeeDTO employee) {
        if (employee != null) {
            Employee employee1 = new Employee();


            employee1.setFirstName(employee.getFirstName());
            employee1.setLastName(employee.getLastName());
            employee1.setEmail(employee.getEmail());
            employee1.setEmployeeDepartmentId(employee.getEmployeeDepartmentId());




            return employee1;
        }
        return null;
    }


 public static EmployeeDTO valueOf(Employee employee) {
        EmployeeDTO employeeDTO = new EmployeeDTO();
        BeanUtils.copyProperties(employee, employeeDTO);
        return employeeDTO;
    }

    public static Employee valueOf1(EmployeeDTO employeeDTO) {
        Employee employee = new Employee();
        BeanUtils.copyProperties(employeeDTO, employee);
        return employee;
    }
    @Override
    public String toString() {
        return "EmployeeDTO{" +

                " firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ",email='"+ email+'\''+
                ", EmployeeDepartmentId=" + employeeDepartmentId +
                '}';
    }


}

这是 EmployeeService.java 类。

package com.example.demo.Service;

import com.example.demo.model.Employee;
import com.example.demo.DTO.EmployeeDTO;
import com.example.demo.Repositry.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.ArrayList;
import org.springframework.util.CollectionUtils;


import java.util.Optional;


@Service
public class EmployeeService {

    @Autowired EmployeeRepository employeeRepository;

    @Autowired EmployeeService employeeService;

    Logger LOG = LoggerFactory.getLogger(EmployeeService.class);

    public Employee createEmployee(EmployeeDTO employeeDTO) {
        LOG.info(employeeDTO.toString());
        Employee employee = EmployeeDTO.valueOf1(employeeDTO);
        LOG.info(employee.toString());
        return employeeRepository.saveAndFlush(employee);
    }

    public EmployeeDTO getUserById(Long id) {
        Employee employee = employeeRepository.findById(id).orElse(null);
        if (employee != null) {
            return EmployeeDTO.valueOf(employee);
        }
        return null;
    }

    public List<EmployeeDTO> getAllUsers() {
        List<Employee> employees = employeeRepository.findAll();
        List<EmployeeDTO> employeeDTOList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(employees)) {
            for (Employee employee: employees) {
                employeeDTOList.add(EmployeeDTO.valueOf(employee));
            }
        }
        return employeeDTOList;
    }


}

这是 EmployeeController.java 类

@Controller
public class EmployeeController {
    Logger LOG = LoggerFactory.getLogger(EmployeeController.class);


 @Autowired
    private EmployeeService employeeService;

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public String testApi() {
        return "Hello World";
    }

    @RequestMapping(value = "/employee/create", method = RequestMethod.POST)
    @ResponseBody
    public String createEmployee(@RequestBody EmployeeDTO employeeDTO) {
        LOG.info("create Employee");
        Employee employee = employeeService.createEmployee(employeeDTO);
        if (employee != null) {
            return "Successfully created user with " + employee.getFirstName() + " " + employee.getLastName();
        }
        return "Failed to create user";
    }

    @RequestMapping(value = "/user/read", method = RequestMethod.GET)
    @ResponseBody
    public EmployeeDTO getUser(@RequestParam Long id) {
        LOG.info("get user");
        return employeeService.getUserById(id);
    }

  

      @RequestMapping(value = "/user/all", method = RequestMethod.GET)
        @ResponseBody
        public List<EmployeeDTO> getAllUsers() {
            LOG.info("get all users");
            return employeeService.getAllUsers();
        }
    }

标签: javaspringoraclespring-boothibernate

解决方案


我不知道您使用的工具,但是 - 如果这样:

@Table(name = "demo_employee1")

表示您想使用的表,然后 Oracle 抱怨说

ORA-00942: 表或视图不存在

然后:在 Oracle 中,对象名称 - 默认情况下 - 以大写形式存储,因此 - 尝试DEMO_EMPLOYEE1而不是demo_employee1.


如果不是这种情况,请检查是否

  • 您使用的表实际上存在于您连接到的 Oracle 模式中
  • 如果其他人拥有它,您是否有权使用它

推荐阅读