I am new in Java and trying to create a simple web application for CRUD functions using RestfulAPI.
Employee.java
package project.test.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Entity
@Data
@Getter
@Setter
@Table(name = "Employee")
public class Employee {
@Id
@Column(name = "EmployeeID")
private String EmployeeID;
@Column(name = "FirstName")
private String FirstName;
@Column(name = "MiddleName")
private String MiddleName;
@Column(name = "LastName")
private String LastName;
public Employee() {
}
public Employee(String EmployeeID, String FirstName, String MiddleName, String LastName) {
super();
this.EmployeeID = EmployeeID;
this.FirstName = FirstName;
this.MiddleName = MiddleName;
this.LastName = LastName;
}
public String getEmployeeID() {
return EmployeeID;
}
public void setEmployeeID(String EmployeeID) {
this.EmployeeID = EmployeeID;
}
public String getFirstName() {
return FirstName;
}
public void setFirstName(String FirstName) {
this.FirstName = FirstName;
}
public String getMiddleName() {
return MiddleName;
}
public void setMiddleName(String MiddleName) {
this.MiddleName = MiddleName;
}
public String getLastName() {
return LastName;
}
public void setLastName(String LastName) {
this.LastName = LastName;
}
}
EmployeeRepository.java
package project.test.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import project.test.entity.Employee;
public interface EmployeeRepository extends JpaRepository<Employee, String> {
}
EmployeeService.java
package project.test.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import project.test.entity.Employee;
import project.test.repository.EmployeeRepository;
@Service
public class EmployeeService {
@Autowired
private EmployeeRepository employeeRepository;
public List<Employee> getAllEmployees() {
return employeeRepository.findAll();
}
}
EmployeeController.java
package project.test.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import project.test.entity.Employee;
import project.test.service.EmployeeService;
@RestController
@RequestMapping("/api")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
// Get all employees
@GetMapping("/Employee")
public List<Employee> getAllEmployees() {
return employeeService.getAllEmployees();
}
}
When I load localhost:8080/api/Employee
, it shows an empty list even though I already have data in the table Employee in the PostgreSQL database.
Here is my Hibernate SQL execution:
Hibernate: select e1_0.EmployeeID,e1_0.FirstName,e1_0.LastName,e1_0.MiddleName from Employee e1_0
Could anybody please tell me why it does not response the JSON data as expected?
So, in case you do not want to use findAll(), you can use @Query to directly write a proper query that I can be sure it works in PostgreSQL:
@Query(value = "SELECT \"EmployeeID\", \"FirstName\", \"MiddleName\", \"LastName\" FROM \"Employee\"", nativeQuery = true)
List<Employee> NqgetAllEmployees();
The tricky part of the repository methods (in PostgreSQL situation specifically) is the quotation marks that can make PostgreSQL misunderstand and instead of overwriting the methods, I think it's easier to write the direct query.
It would be nice if someone could tell what is better, repository methods or native query.