自己写的代码覆盖hibernate中的代码
翻了翻源码发现,很多地方都是使用LinkedHashMap或者是List来传输Entity里面的fields,于是感觉Hibernate应该是考虑到使用Entity里面定义的fields的顺序来实现建表语句里的表字段顺序的。
于是就一步步跟踪下去,终于在一个地方发现了一个问题:org.hibernate.cfg包下的PropertyContainer类在取fields的时候是使用TreeMap来保存的,于是试着改了下,将这个里面的所有TreeMap改成了LinkedHashMap,编译通过,打包,测试。
终于,我们期待已久的结果出来了:建表语句里面的字段顺序和Entity里面的fields的顺序一致了。
在自己的项目中新建一个
org.hibernate.cfg的包
新建类PropertyContainer。
根据原理,如果用户自定义的类与Jar中同名,会优先使用 用户自定义的类。这样就可以覆盖原来的Hibernate的行为
有的版本,是替换4个地方
将TreeMap替换为 LinkedHashMap
重新编译之后,数据库中的字段顺序就与实体类的顺序一样
这样处理的之后,尤其在Excel数据导入的时候,会非常的方便核对数据。