Hibernate не создает таблицы автоматически - PullRequest
0 голосов
/ 09 июня 2018

У меня есть проект Maven с Hibernate / Spring / MySQL.У меня есть базовая сущность, и я хочу, чтобы Hibernate создавал таблицы автоматически, но Hibernate не создает никаких таблиц.Никаких исключений тоже не выдается, поэтому я понятия не имею, что здесь не так.

application.properties:

# ===============================
# = DATA SOURCE
# ===============================
spring.datasource.url = jdbc:mysql://localhost:3306/task
spring.datasource.username = root
spring.datasource.password = 12345678
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1

# ===============================
# = JPA / HIBERNATE
# ===============================
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.format_sql = true
spring.jpa.properties.hibernate.id.new_generator_mappings = true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.max-idle=20
spring.datasource.tomcat.min-idle=15
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.time-between-eviction-runs-millis=3600000
spring.datasource.tomcat.validation-query=SELECT 1

User.java:

package com.example.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import lombok.Data;

@Entity
@Table(name = "user")
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;

    @Column(name = "telegramId")
    private Integer telegramId;

    @Column(name = "firstName")
    private String firstName;

    @Column(name = "lastName")
    private String lastName;

    @OneToMany(
            mappedBy = "user",
            cascade = CascadeType.ALL,
            orphanRemoval = true
            )
    private List<Message> msg = new ArrayList<>();
}

В User.java я также использую lombok.Какие-либо предложения?Спасибо.

Ответы [ 5 ]

0 голосов
/ 16 марта 2019

в моем случае, я считаю, что, поскольку я использовал hibernate 5, hibernate 5 должен автоматически решать некоторые проблемы с форматированием таблицы столбцов, некоторые таблицы не были созданы, но другие были.Я РАЗЛИЧИВАЮ файлы для анализа различий ... и проблема была ... Я использовал свойство, которое препятствовало созданию таблицы ...

@Column(nullable = false, columnDefinition = "DECIMAL(6,6) DEFAULT 0.00")
private Double longitude;

Я удалил columnDefinition = "DECIMAL(6,6) DEFAULT 0.00"и таблицы были созданы нормально.

0 голосов
/ 05 февраля 2019

тест, изменяющий имя таблицы, у меня это сработало.

0 голосов
/ 09 июня 2018

Если вы используете spring-data (что, я надеюсь, так и есть), удалите аннотацию @Table, Spring автоматически создаст таблицу с именем user только из @Entity.Минимальная конфигурация, которая должна входить в вашу application.propertes, такова:

# Hibernate
spring.datasource.platform=mysql
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update

# Mysql
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://yourdburl:3306/test?createDatabaseIfNotExist=true // creates a schema if doesn't exist
spring.datasource.username=root
spring.datasource.password=12345678

spring.jpa.hibernate.ddl-auto=update будет обновлять вашу таблицу БД (при необходимости) каждый раз, когда ваше приложение подключается к ней.Он также должен создать его, если его нет.Другие значения create и create-drop, которые в значительной степени говорят сами за себя

0 голосов
/ 10 июня 2018

Я нашел решение.Проблема была в том, что Application.java был в пакете com.example.BotApp., теперь он в com.example..Я не знаю, но как-то это помогло.

0 голосов
/ 09 июня 2018

вам не хватает этого свойства в вашем файле свойств

hibernate.hbm2ddl.auto = "update"

spring.jpa.properties.hibernate.hbm2ddl.auto=update

hibernate.hbm2ddl.auto автоматически проверяет и экспортирует DDL в схему, когдаsessionFactory создан.

По умолчанию он не выполняет никакого автоматического создания или изменения в БД.Если пользователь устанавливает значения update или create или validate или create-drop , тогда он выполняет изменение схемы DDL автоматически в соответствии с заданным значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...