hibernate Springboot不创建数据库表

qlfbtfca  于 2023-10-23  发布在  Spring
关注(0)|答案(3)|浏览(118)

我在springboot中创建了我的实体

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Table;

@Table(name="users") 
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String email;
}

我在application.properties中设置了数据库配置(我使用MySQL XAMPP Apache服务器)

spring.datasource.url=jdbc:mysql://localhost:3307/mediatech?createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
server.port=8082

当我运行应用程序时,它创建了数据库,但没有创建表,我如何修复它并创建数据库模式表?

erhoui1w

erhoui1w1#

问题在于spring.jpa.hibernate. ddl-auto的值应该是update
create和update的区别:

  • “create”:Hibernate将在每次应用程序启动时从头开始创建数据库模式。
  • “update”:Hibernate将尝试更新数据库模式以匹配实体模型。它将根据需要添加表、列和约束,但不会删除现有的表或列。这是一种更安全的开发选项,有时也用于生产。
ctehm74n

ctehm74n2#

您可以将show-sql属性设置为true,以在日志中获取hibernate运行的SQL查询。

spring.jpa.hibernate.show_sql=true

另外,表名“user”可能会有问题,因为这是SQL中的保留字,请尝试使用反引号或使用@Table(name="users")指定另一个名称
同时确保实体类中有getter/setter。

hlswsv35

hlswsv353#

如果你在Spring Boot3中使用Lombok依赖,你可能会遇到问题。
1.尽量不使用args,而使用手动创建的所有args构造函数。
1.确保存储库接口具有User类的名称和Long作为数据类型。
它应该看起来像下面这样:

UserRepository extends CrudRepository<Users,Long>

相关问题