今天在公司的项目开发中,遇到一个问题:
后端对象实体类中写入字段顺序与数据库中的存储顺序不一致。
仔细观察到数据库中的表字段的排序方式是按照拼音字母的顺序abcdef......来存储的
而我的实体类中的表结构顺序却不是这样的
经过查阅资料,总结到了解决这个问题的方法:
一、在application.yml配置中添加数据库根据实体类自动创建数据库表的配置(这里数据库采用MySQL数据库)
二.实体类字段顺序与数据库不一致解决办法
在org.hibernate.cfg包下的PropertyContainer类在取fields的时候是使用TreeMap来保存的,
以下是TreeMap的基本介绍
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, Serializable
TreeMap中的元素默认按照keys的自然排序排列。
对Integer来说,其自然排序就是数字的升序;对String来说,其自然排序就是按照字母表排序
所以猜测是TreeMap的原因导致数据库表字段没有按照实体类设计而来
在项目结构中新建一个与之前相同名的文件,修改TreeMap为HashMap,即可完成
这时候在创建数据库表结构时就是按照实体类的创建顺序来了。