我有一个使用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。有什么建议吗?谢谢。
8条答案
按热度按时间vcirk6k61#
我找到了一个解决方案。问题是Application.java在
com.example.BotApp.
包中,现在它在com.example.
包中。我不知道,但不知何故它起了作用。0x6upsns2#
在属性文件中缺少此属性
hibernate.hbm2ddl.auto=“更新”
hibernate.hbm2ddl.auto sessionFactory时,www.example.com会自动验证DDL并将其导出到模式。
默认情况下,它不会自动在数据库上进行任何创建或修改。如果用户将值设置为update或create或validate或create-drop,则它会根据给定值自动进行DDL模式更改。
rm5edbpk3#
如果您使用的是
spring-data
(我希望您是这样),请删除@Table
注解,Spring将自动从@Entity
创建一个名为 user 的表。spring.jpa.hibernate.ddl-auto=update
将在您的应用每次连接到数据库表时更新该数据库表(如有必要)。如果没有数据库表,它还应创建数据库表。其他值包括create
和create-drop
,这两个值几乎是不言自明的ecr0jaav4#
我也遇到过同样的问题,以下可能是原因之一。
在我的例子中:
早些时候,
配置类在com. abc. school包中,我的实体类在com. abc. entity包中。
因此,实体类的包名称不正确。它应该是com. abc. school. entity
rqcrx0a65#
将属性spring.jpa.generate-ddl=true置于spring.jpa. hib.ddl.auto = update之上以解决此问题。
hc2pp10m6#
如果您的包与主应用程序的包不同,则必须添加@EntityScan(“package where to find the entities”)
k4ymrczo7#
测试更改表的名称,这对我很有效。
13z8s7eq8#
在我的例子中,我相信,因为我使用的是hib5,hib5应该会自动解决columns表的一些格式问题,有些表没有创建,但有些表创建了。我对文件进行DIFF以分析差异...问题是...我使用了一个属性,这阻碍了表的创建...
我已经删除了
columnDefinition = "DECIMAL(6,6) DEFAULT 0.00"
,并且正常创建了表。