Coach表是什么档次:表名是什么 (table name)

关于Coach表是什么档次的问题,在table name中经常遇到, 我正在使用 H2 数据库创建 Spring Boot 应用程序。我不断收到以下错误:

我正在使用 H2 数据库创建 Spring Boot 应用程序。我不断收到以下错误:

未找到表“THINGS_TO_DO”;SQL 语句:
插入到 things_to_do (id,name,verified) 值 (1,'TestUser1',1) [4S102-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;
    }
}

Repository ThingsToDoRepository 是:

package me.hiboy.springboot.microservice.example.todo;
import org.springframework.data.jpa.repository.JpaRepository;
public intece 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);
    }
}

编辑:到目前为止给出的所有答案都没有帮助。

1

如果你的主类在 com.example 包中,那么你的应用程序中的所有包将遵循这个包作为新实体,包将是 com.example.entity

0

您需要使用正确的包名,因为我可以看到你应用程序类和其他类不遵循包命名约定。

如果我只是想插入简单的测试数据,我经常实现一个ApplicationRunner这个接口的实现在应用程序启动时运行,可以使用例如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));
    }
}
0

您收到此错误,因为没有这样的名称的表。

您可以尝试将spring.jpa.hibernate.ddl-auto=create-drop添加到您的.properties文件。然后,每次运行应用程序时,它都应该使用您的实体生成该表。

或者你需要手动创建一个名为things_to_do的表,然后当你运行你的应用程序时,它应该工作。

/ src / main / resources / schema.sql

create table things_to_do
(
   id integer not null,
   /*all the rest columns */
);

另一件事是,Spring 找到你的组件(如存储库或服务等)它扫描包。并自动配置扫描你的主类所在的包和所有嵌套包。

因此,如果您不想手动设置类所在的位置,则需要遵循此结构!

例子:

my.main.package // here is your main class
my.main.package.entities // here are your entities
my.main.package.repositories // your repos
my.main.package.services // services

这只是一个例子,它并不意味着你应该提供相同的名称,只是按照惯例。希望很清楚我所说的包结构是什么意思:)

0

通常,您会通过其实体名称而不是实际的表名来引用您的表。在这种情况下,它将是 ThingsToDo。

但在这种特殊情况下,你通过给你的实体另一个名字来覆盖这一点:

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

这就是为什么你应该在查询中使用“things_to_do”,或者删除 name 语句。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(502)
Cogat测试:单元测试集成测试回归测试验收测试
上一篇
Cst入门教程:Google Chrome扩展入门教程不起作用
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(35条)