我有Hibernate / Spring / MySQL的Maven项目。我有基本的实体,我希望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。有什么建议? 谢谢。
答案 0 :(得分:1)
您在属性文件中缺少此属性
hibernate.hbm2ddl.auto = “更新”
spring.jpa.properties.hibernate.hbm2ddl.auto=update
hibernate.hbm2ddl.auto会在创建sessionFactory时自动验证并将DDL导出到架构。
默认情况下,它不会在db上自动创建或修改。如果用户将值设置为更新或创建或验证或创建 - 删除,则它会根据给定值自动执行DDL架构更改。
答案 1 :(得分:1)
如果您正在使用spring-data
(我希望您这样做),请删除@Table
注释,Spring将自动创建一个名为 user 的表格,来自{ {1}}。应该进入@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
几乎是不言自明的
答案 2 :(得分:1)
我找到了解决方案。问题是Application.java在com.example.BotApp.
包中,现在它在com.example.
中。我不知道,但不知怎的,它有所帮助。
答案 3 :(得分:0)
测试更改表的名称,这对我有用。
答案 4 :(得分:-1)
就我而言,我认为,因为我使用的是hibernate 5,所以hibernate 5应该自动解决column表格的某些格式问题,因此不会创建某些表格,而另一些则可以。 我对文件进行了区分以分析差异...问题是... 我正在使用一个属性,这阻碍了表的创建...
@Column(nullable = false, columnDefinition = "DECIMAL(6,6) DEFAULT 0.00")
private Double longitude;
我已删除columnDefinition = "DECIMAL(6,6) DEFAULT 0.00"
,并且表已正常创建。