@Query 注释在带有 Oracle 数据库的 Spring boot 中不起作用

问题描述 投票:0回答:1

我正在尝试执行插入语句,但不幸的是,我无法将数据保存到数据库中。 可能是这里的@Query注释无法正常工作。

以下是我的课程。 控制器:

@Component
//@RequestMapping("/api/v1")
public class EmployeeControllerImpl implements EmployeeController{
    @Autowired
    public EmployeeService employeeService;
    
    @Override
    @PostMapping("/addEmployee")
    public Employee addEmployee(@RequestBody Employee emp) {
        return employeeService.addEmployee(emp);
        }

}

服务:

@Component
public class EmployeeServiceImpl implements EmployeeService{
    
    @Autowired
    public EmployeeRepository employeeRepository;
    
    @Override
    public Employee addEmployee(Employee emp) {
    
        return employeeRepository.addEmployee(emp);
    }
}

存储库接口:

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer > {

    @Query(value = "insert into employee (fname, lname, gender, age, contactNumber, empEmail, empPass) "
            + "VALUES (:fname, :lname, :gender, :age, :contactNumber, :empEmail, :empPass)", nativeQuery = true)
    Employee addEmployee(Employee emp );
}

Employee.java:

@Data
@Entity
@Table(name="Employee")
@Getter
@Setter
public class Employee {

    @Id
    @Column(name = "employee_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int empId;
    @Column
    private String fname;
    @Column
    private String lname;
    @Column
    private String gender;
    @Column
    private int age;
    @Column
    private String contactNumber;
    @Column
    private String empEmail;
    @Column
    private String empPass;
}

应用程序属性:

server.port:8082

spring.datasource.url=jdbc:oracle:thin:@localhost:1521/orcl
spring.datasource.username=system
spring.datasource.password=oracle
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

spring.jpa.database-platform=org.hibernate.dialect.OracleDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

项目结构:

java spring-boot jpa spring-data-jpa oracle-sqldeveloper
1个回答
0
投票

JpaRepository 中已经有一个 save() 方法。您可以在您的服务类别中使用它。

public class EmployeeServiceImpl implements EmployeeService{
    
    @Autowired
    public EmployeeRepository employeeRepository;
    
    @Override
    public Employee addEmployee(Employee emp) {
        return employeeRepository.save(emp);
    }
}

另外,在你的实体类中,当你使用lombok时,你只需要添加@Data即可。这将包括 @Getters 和 @Setter,因此您无需单独添加。所以它看起来像这样:

@Data
@Entity
@Table(name="Employee")
public class Employee

您还应该使用@Controller和@Service而不是@Component。它指定代码应该位于哪一层。

© www.soinside.com 2019 - 2024. All rights reserved.