CrudRepository не может выполнять какие-либо запросы на h2 db - PullRequest
0 голосов
/ 18 января 2020

Я новичок в весенних данных. У меня есть приложение h2 db, а также контроллер покоя. По сути, у меня есть несколько конечных точек, которые вы вызываете для выполнения определенных запросов. Конечная точка будет использовать itnerface, который расширяет crudrepository и выполняет запросы. Проблема заключается в том, что я называю конечные точки, но, похоже, не находит ничего в базе данных. Я получил доступ к консоли db и вижу свои предварительно заполненные данные, которые я заполняю с помощью data.sql.

. Вот что у меня есть:

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Long> {
}

Это моя сущность:

@Entity

public class Employee {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstname;

public Employee(){}

public Employee(String firstname, String lastname, String email) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.email = email;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

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;
}

private String lastname;
private String email;
}

Контроллер:

@RestController 
public class EmployeeController {

@Autowired
EmployeeService employeeServices;

@GetMapping("/getAllEmployees")
public void getAllEmployees(){

    //Add employee to db via spring data
    employeeServices.getAllEmployees();
}

@GetMapping("/deleteEmployee/{id}")
public void delete(@PathVariable Long id){

    //Delete employee to db via spring data
    employeeServices.deleteEmployee(id);
    System.out.printf("Deleted");
}

@PostMapping("/createEmployee")
public void create(@RequestBody Employee employee){
    //Add employee to db via spring data

    Employee save = employeeServices.createEmployee(employee);
    System.out.println("created: " + save.toString());

}

}

И мой сервис:

@Service
public class EmployeeService
{
@Autowired
EmployeeRepository employeeRepository;

public void getAllEmployees(){
    List<Employee> listOfEmployees = new ArrayList<>();
    employeeRepository.findAll().forEach(employee -> listOfEmployees.add(employee));

    System.out.println(listOfEmployees);
}

public void deleteEmployee(Long id){
    employeeRepository.deleteById(id);
    System.out.println("deleted.");
}

public Employee createEmployee(Employee employee){
    employeeRepository.save(employee);
    System.out.println("saved.");
    return employee;
}
}

И это мое приложение.

#Server
server.port=9975
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
# Datasource
spring.datasource.url=jdbc:h2:file:./fileOrDbName
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

И мои данные. sql:

DROP TABLE IF EXISTS TBL_EMPLOYEES; CREATE TABLE TBL_EMPLOYEES (id INT AUTO_INCREMENT  PRIMARY KEY, first_name VARCHAR(250) NOT NULL, last_name VARCHAR(250) NOT NULL, email VARCHAR(250) DEFAULT NULL); INSERT INTO TBL_EMPLOYEES (first_name, last_name, email) VALUES ('Lokesh', 'Gupta', 'abc@gmail.com'), ('Caption', 'America', 'cap@marvel.com');

Приложение запускается нормально, и я могу получить доступ к консоли db через localhost:9975/h2, но контроллеры crud, похоже, не обращаются к db , Есть идеи?

1 Ответ

1 голос
/ 18 января 2020

Обнаружил проблему. Это было потому, что я не аннотировал поля в своем классе сущности @Column(name="..") и не аннотировал класс Table(name="TBL_EMPLOYEES"). Также необходимо добавить следующее в файл application.properties spring.jpa.hibernate.ddl-auto=none spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

...