Spring Boot自动创建数据库表

时间:2018-07-22 21:58:08

标签: java hibernate spring-boot spring-data-jpa h2

我正在开发一个使用H2,JPA和Maven的Spring Boot应用程序。我希望Spring Boot自动创建我的表。但是如果我不想把我的 我将我的核心课程放在实体课程中。如果我不将实体类放在我拥有的核心程序包的相同或子程序包中 我的@SpringBootApplication表示法,那么spring不会创建我的表。我想知道有没有办法解决这个问题?我想放 我的实体类与@SpringBootApplication类放在不同的包中,并且仍然可以在Spring中创建我的表。请看下面。 如您所见,我的实体类在com.dao中,而跑步者类在com.core中。

rcs -u motd

4 个答案:

答案 0 :(得分:1)

@EntityScan("com.dao")
public class MyConfig {

}

答案 1 :(得分:0)

在Spring Boot应用程序配置类上使用此@ComponentScan(basePackages = "app, entities, repository, services"),以实际告诉Spring在何处扫描组件和@Entity类(如果它们不在配置文件的同一包的子包中)在里面。

在此示例中,我们有包含不同种类的类的不同软件包。程序包名称为:应用程序,实体,存储库,服务,或您已经拥有或想要为其命名的任何名称。

祝你好运!

答案 2 :(得分:0)

  

传统上,JPA“实体”类是在persistence.xml文件中指定的。在Spring Boot中,此文件不是必需的,而是使用“实体扫描”。默认情况下,将搜索主配置类(用@EnableAutoConfiguration或@SpringBootApplication注释的一个)下的所有软件包。

这将转换为com.core。*将被扫描。您遇到的问题是使用com.dao而不是com.core。*的结果。绝对没有将Spring Boot放在一个软件包中的限制,并且通常假定Application Main仅存在于根级别。

答案 3 :(得分:0)

我最终在项目中创建表的方式是使用 data.sql 和 schema.sql

enter image description here

您可以添加一个 data.sql 来放置您的表创建

CREATE TABLE IF NOT EXISTS `springsecurity1`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(120) NOT NULL,
`enabled` INT NOT NULL,
`password` VARCHAR(120) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
 UNIQUE INDEX `username_UNIQUE` (`username` ASC) VISIBLE)
 ENGINE = InnoDB
 DEFAULT CHARACTER SET = utf32
 COLLATE = utf32_bin;

 TRUNCATE table springsecurity1.users;
 insert into springsecurity1.users values (NULL, 'yavdhesh',1,'12345');

在您启动 Spring Boot 应用程序后。您也可以在数据库中找到它。 enter image description here

希望对大家有用。