Spring Boot从数据库中显示错误顺序的实体创建表

use*_*201 2 ddl hibernate jpa spring-data-jpa spring-boot

我正在使用 MySQL 创建一个新的 Spring boot 项目,但我不知道为什么我的数据库中的排序是按字母顺序显示的。我想知道它是否可以遵循我的班级顺序,如 ID、姓名、电子邮件、性别和年龄。

这是我第一次使用这种方法生成数据库,通常我是从phpMyAdmin生成的。

这是我在 phpMyAdmin 中的最终结果:

id, address, age, email, gender, name
Run Code Online (Sandbox Code Playgroud)

我希望它遵循我的实体类的顺序:

id, name, email, gender, age, address
Run Code Online (Sandbox Code Playgroud)

这是我的application.properties

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=user
spring.datasource.password=x


spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
Run Code Online (Sandbox Code Playgroud)

我还创建了User.java

id, address, age, email, gender, name
Run Code Online (Sandbox Code Playgroud)

UserRepository.java

package hello.model;

import org.springframework.data.repository.CrudRepository;

import hello.model.User;

// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete

public interface UserRepository extends CrudRepository<User, Long> {

}
Run Code Online (Sandbox Code Playgroud)

xyz*_*xyz 6

是的,你是对的,hibernate DDL 按字母顺序生成列名称。当 hibernate 解析实体映射时,它会根据实体类中的字段构建模型。为了处理实体属性/字段,它使用 PropertyContainer 帮助器类,并且该帮助器将字段存储在 TreeMap 中。当 DDL 生成器开始工作时,它会迭代字段并创建数据库列名称,因为 TreeMap 中的迭代器给出了所有列名称的排序顺序。你无法改变它。