【问题标题】: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 应用程序后。您也可以在数据库中找到它。

        希望对某人有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-12
          • 2017-10-08
          • 2021-03-04
          • 2017-01-16
          • 1970-01-01
          • 2015-01-08
          • 1970-01-01
          相关资源
          最近更新 更多