【问题标题】:Spring boot auto create database tablesSpring Boot 自动创建数据库表
【发布时间】:2018-12-30 08:40:56
【问题描述】:
我正在开发一个使用 H2、JPA 和 maven 的 Spring Boot 应用程序。我希望 spring boot 自动创建我的表。但如果我不想把我的
我放置核心类的实体类。如果我没有将我的实体类放在我拥有的核心包的相同或子包中
我的@SpringBootApplication 表示法然后弹簧不会创建我的表。我想知道有没有办法解决这个问题?我想放
我的实体类放入与我的@SpringBootApplication 类不同的包中,并且仍然使弹簧在 H2 中创建我的表。请看下文。
如您所见,我的实体类在 com.dao 中,而我的 runner 类在 com.core 中。
package com.dao;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "method")
public class Method {
@Id
private long id;
private String name;
// Setters getters
}
package com.core;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Runner {
public static void main(String[] args) {
SpringApplication.run(Runner.class, args);
System.out.println("Boot");
}
}
【问题讨论】:
标签:
java
hibernate
spring-boot
spring-data-jpa
h2
【解决方案1】:
@EntityScan("com.dao")
public class MyConfig {
}
【解决方案2】:
传统上,JPA“实体”类在 persistence.xml 文件中指定。使用 Spring Boot,此文件不是必需的,而是使用“实体扫描”。默认情况下,会搜索主配置类(带有@EnableAutoConfiguration 或@SpringBootApplication 注释的那个)下的所有包。
这转换为 com.core.* 将被扫描。您遇到的问题是使用 com.dao 而不是 com.core.* 的结果。 Spring Boot 并没有限制必须在一个包中,通常假设 Application Main 仅存在于根级别。
【解决方案3】:
在 spring boot 应用程序配置类上使用这个@ComponentScan(basePackages = "app, entities, repository, services"),实际上告诉 spring 在哪里扫描组件和@Entity 类,如果它们不在您的配置文件所在的同一包的子包中。
在这个例子中,我们有不同的包包含不同种类的类。包名称是:应用程序、实体、存储库、服务或您已经拥有或想要命名的任何名称..
祝你好运!
【解决方案4】:
我最终在项目中创建表的方式是使用 data.sql 和 schema.sql
您可以添加一个 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 应用程序后。您也可以在数据库中找到它。
希望对某人有用。