Проблема создания таблицы в базе данных H2 с помощью SpringBoot - PullRequest
0 голосов
/ 18 октября 2019

Мои поздравления уважаемым пользователям. Я новичок в весенней загрузке и хочу просто создать простую таблицу в базе данных H2. Это класс модели

@Entity
public class Human 

{

    @Id
    private long id;


    private String firstname;

    private String lastname;

        private String email;

        public long getId() {
            return id;
        }




        public void setId(int id) {
            this.id = id;
        }
        public String getFirstname() {
            return firstname;
        }
        public void setFirstname(String firstname) {
            this.firstname = firstname;
        }
        public String getLastname() {
            return lastname;
        }
        public void setLastname(String lastname) {
            this.lastname = lastname;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
}

и это pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo-1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo-1</name>
<description>Demo project for Spring Boot</description>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

и application.properties:

spring.h2.console.enabled= true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:file:~/user
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

пока приложение не будет работать хорошо, единственная проблема, которую таблица не показывает в консоли H2 (я незнаю, действительно ли он создан или нет, но когда я использую консоль H2, таблица была создана мгновенно)

Так, пожалуйста, в чем может быть проблема? Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Решением здесь является просто добавление аннотации для основного класса

@EntityScan("com.example.model")

Так что здесь Spring отсканирует пакет com.example.model и connet с базой данных H2, а затем создаст таблицу

Стол человека происхождения Человеческое существо

0 голосов
/ 21 октября 2019

Есть несколько вещей, которые вам нужно проверить, чтобы убедиться, что это работает.

  • Убедитесь, что вы правильно определили слой хранилища. Также убедитесь, что вы предоставили все правильные аннотации.
  • Если вы создаете запросы для таблиц, убедитесь, что вы помещаете эти запросы в имя файла schema.sql. Также убедитесь, что файл помещен в каталог src/main/resources/ folder.But при предоставлении schema.sql убедитесь, что spring.jpa.hibernate.ddl-auto как оба не будут работать в одно и то же время , как и предполагалось.

В JPA-на основе приложения вы можете разрешить Hibernate создать схему или использовать schema.sql, но вы не можете сделать и то, и другое. Обязательно отключите spring.jpa.hibernate.ddl-auto, если вы используете schema.sql.

  • Если у вас есть какие-либо запросы на обновление данных, которые нужно выполнить, поместите их в имена файлов data.sql. Также убедитесь, что файл помещен в папку src/main/resources/. Это будет выполнено после того, как ddl-auto создаст таблицы.

Уровень репозитория, например:

@Repository
public interface HumanRepository extends JpaRepository<Human, Integer> {

}

Как сказал @sovannarith cheav, вам необходимо предоставить свойство в application.properties или application.yml, например:

spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Свойство spring.jpa.hibernate.ddl-auto может иметь различные значения в зависимости от вашего варианта использования. Значениядля этого свойства может быть:

validate: проверить схему, не вносит изменений в базу данных.
update: обновить схему.
create: создает схему, уничтожая предыдущие данные.
create-drop: удалить схему в конце сеанса.

Если это не сработало, возможно, Springboot не идентифицирует H2, поэтому попробуйте установить следующее:

spring.datasource.platform=h2
spring.datasource.initialization-mode=always

Официальный Док

...