Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JPA 自动建表时,表字段顺序跟实体类不一致怎么解决?另外如果想要把基类的字段放在后面怎么实现? #2

Open
rzh0001 opened this issue Sep 2, 2017 · 1 comment

Comments

@rzh0001
Copy link

rzh0001 commented Sep 2, 2017

No description provided.

@beamofsoul
Copy link
Owner

beamofsoul commented Sep 4, 2017

@rzh0001

因为用的Hibernate Annotation,所以暂时没办法通过设置达到手动确定生成的字段顺序,如果使用 Hibernate XML Config 方式就可以解决这个问题,只需要手动给配置文件里的字段排序即可。

截止到 hibernate-core-5.2.10.Final,其存放生成字段所用的对象仍然是 TreeMap。如果想手动确定生成的字段顺序或通过注解配置,之前有同行采用修改 org.hibernate.cfg.PropertyContainer.java 源码的方式去实现该功能,你可以参照处理一下 http://www.cnblogs.com/eggbucket/archive/2013/03/05/2943727.html

当初着手解决这个问题的时候,发现 PropertyContainer.java 是被保护的,所以也就不能够在不破坏源码的情况下进行功能的修改。本人是强烈不推荐手动修改 hibernate-core 源码以达到自定义功能这种方法的,所以这个问题也就暂且搁置了。

Hibernate的作者们应该是想告诉使用者,用了Hibernate以后,再也不需要关注甚至通过DBMS访问数据库了,所以生成好的表中的字段顺序其实怎么样都无所谓的,对使用者来说。

PS: 使用 QueryDsl 和/或 Spring Data 以后,无论 CRUD 都可以通过类型安全的方式去处理,再也不需要手写SQL ( 除非用到 @ Query,所以本人同样不推荐大家使用 @ Query 注解,几乎所有极限SQL都可以用 QueryDsl 和 Spring Data 调用存储过程来实现 ),因此不再需要关心字段顺序。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants