0

H2 データベースを使用して Spring Boot アプリケーションを作成しています。次のエラーが常に発生します。

テーブル「THINGS_TO_DO」が見つかりません。SQL ステートメント:
things_to_do (id、名前、検証済み) 値 (1、'TestUser1'、1) に挿入 [42102-197]

そして、アプリケーションでこのテーブル名をどこに渡すかわからないので、これは論理的だと思います。また、テーブル名はどうあるべきですか-テーブルに必要な特定の名前はありますか?

私の ThingsToDo.java は以下のようなものです:

package me.hiboy.springboot.microservice.example.todo;

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

@Entity
@Table(name="things_to_do")
public class ThingsToDo {

    @Id
    private Long id;

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

    @Column(name="verified")
    private int verificationStatus;

    private String task;

    public ThingsToDo() {

    }

    public ThingsToDo(Long id, String name, int verificationStatus, String task) {
        super();
        this.id=id;
        this.name=name;
        this.verificationStatus=verificationStatus;
        this.task=task;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getVerificationStatus() {
        return verificationStatus;
    }

    public String getTask() {
        return task;
    }
}

コントローラーの ThingsToDoController.java は次のとおりです。

package me.hiboy.springboot.microservice.example.todo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ThingsToDoController {

    @Autowired
    ThingsToDoRepository repository;

    @GetMapping("/")
    public String index() {
        return "Hello from the ToDo Controller\n";
    }

    @GetMapping("/todo/{name}")
    public ThingsToDo getThingsToDo(@PathVariable String name) {
        ThingsToDo thingToDo=repository.findByName(name);

        return thingToDo;
    }
}

リポジトリ ThingsToDoRepository は次のとおりです。

package me.hiboy.springboot.microservice.example.todo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface ThingsToDoRepository extends JpaRepository<ThingsToDo, Long> {
    ThingsToDo findByName(String name);
}

Application.properties は次のとおりです。

spring.application.name=todo-service
server.port=8080
spring.jpa.show-sql=true
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.platform=h2
spring.datasource.initialize=true

data.sql は次のとおりです。

insert into things_to_do (id, name, verified) values (1, 'TestUser1', 1);
insert into things_to_do (id, name, verified) values (2, 'TestUser2', 0);

必須ではないと思いますpom.xml-必要な場合は、親切に知っておいてください。それも投稿します。ありがとう。

編集: main() メソッドを持つものはここにあります:

package me.hiboy.springboot.microservice.example.todo.springbootmicroservicetodoservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMicroserviceTodoServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMicroserviceTodoServiceApplication.class, args);
    }
}

編集:これまでに与えられたすべての答えはまったく役に立ちません。

4

4 に答える 4

0

Application クラスや他のクラスがパッケージの命名規則に従っていないことがわかるので、適切なパッケージ名を使用する必要があります。

さらに、単純なテスト データを挿入するだけの場合は、ApplicationRunner. このインターフェイスの実装は、アプリケーションの起動時に実行され、たとえば a を使用しautowired repositoryてテスト データを挿入できます。

実装は次のようになります。

@Component
public class DataLoader implements ApplicationRunner {

    @Autowired
    ThingsToDoRepository repository;

    @Autowired
    public DataLoader(ThingsToDoRepository repository) {
        this.repository = repository;
    }

    public void run(ApplicationArguments args) {
        repository.save(new ThingsToDo(1, 'TestUser1', 1));
        repository.save(new ThingsToDo(2, 'TestUser2', 0));
    }
}
于 2018-04-21T18:43:40.053 に答える