簡體   English   中英

Hibernate 不自動創建表

[英]Hibernate doesn't create tables automatically

我有一個帶有 Hibernate/Spring/MySQL 的 Maven 項目。 我有基本實體,我希望 Hibernate 自動創建表,但 Hibernate 不創建任何表。 也沒有拋出異常,所以我不知道這里出了什么問題。

應用程序.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

用戶.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。 有什么建議么? 謝謝你。

我找到了解決方案。 問題是 Application.java 在包com.example.BotApp. ,現在它在com.example. . 我不知道,但不知何故它有所幫助。

您的屬性文件中缺少此屬性

hibernate.hbm2ddl.auto="更新"

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

hibernate.hbm2ddl.auto 在 sessionFactory 創建時自動驗證並將 DDL 導出到模式。

默認情況下,它不會自動對 db 進行任何創建或修改。 如果用戶將值設置為更新或創建或驗證或創建刪除,則它會根據給定值自動執行 DDL 模式更改。

如果您正在使用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將在您的應用程序每次連接時更新您的數據庫表(如有必要)。 如果沒有,它也應該創建它。 其他值是createcreate-drop ,它們幾乎不言自明

我遇到了同樣的問題。 以下可能是原因之一。

就我而言:

早些時候,
配置類在com.abc.school包內,我的實體類在com.abc.entity包內。

因此,實體類的包名不正確。 它應該是com.abc.school.entity

將屬性spring.jpa.generate-ddl=true置於spring.jpa.hibernate.ddl.auto = 更新之上以解決問題。

如果您沒有與主應用程序的 package 相同的 package,則必須添加 @EntityScan("package where to find the entity")

測試更改表的名稱,這對我有用。

就我而言,我相信,因為我使用的是 hibernate 5,所以 hibernate 5 應該自動解決列表的一些格式問題,有些表沒有創建,但其他表是。 我 DIFF 文件以分析差異......問題是......我正在使用一個屬性並且阻礙了表格的創建......

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

我刪除了columnDefinition = "DECIMAL(6,6) DEFAULT 0.00" ,並且表正常創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM