本文旨在留存后用,顺便帮助遇到这个问题的同学
SpringDataJpa默认建表的时候,由于存储选择的是TreeMap,因此会按照字母进行排序,而不会保持原先我们编写的顺序;
字段顺序解决办法重写PropertyContainer改为LinkedHashMap即可;
以下处理基于3.2.4版本,如果重写类出现引用不到的问题可能是模块管理的问题,需重新在项目引入
implementation ("org.hibernate.common:hibernate-commons-annotations:6.0.6.Final!!")
implementation ("org.jboss.logging:jboss-logging:3.5.3.Final!!")
package org.hibernate.boot.model.internal;
final Map<String, XProperty> localAttributeMap;
if ( !recordComponents.isEmpty() && recordComponents.size() == fields.size() && getters.isEmpty() ) {
localAttributeMap = new LinkedHashMap<>();
}
else {
//此处修改调整 为LinkedHashMap
localAttributeMap = new LinkedHashMap<>();
}
以上解决了字段顺序问题,但我们通常会进行公共字段提取作为基类。
但是这样会造成我们提取的父类字段总是在前,这又不是我们想要的,因此需要进行额外处理;
解决办法重写InheritanceState增加我们自己的逻辑处理
package org.hibernate.boot.model.internal;
public ElementsToProcess postProcess(PersistentClass persistenceClass, EntityBinder entityBinder) {
getElementsToProcess();
addMappedSuperClassInMetadata( persistenceClass );
entityBinder.setPropertyAccessType( accessType );
//重新排序,按我们自定义逻辑
reSortElementsToProcess(elementsToProcess);
return elementsToProcess;
}
/**
* 处理排序问题 将id,tenantId,orgId,userId放在前面 数据放中间 后面跟着 delFlag,createBy,createTime,updateBy,updateTime
* @param elementsToProcess
*/
private void reSortElementsToProcess(ElementsToProcess elementsToProcess){
List<PropertyData> elements = elementsToProcess.getElements();
if(elementsToProcess!=null && elementsToProcess.getElements().size()>9
&& "id".equals(elements.get(0).getPropertyName())
&& "delFlag".equals(elements.get(4).getPropertyName())
&& "createBy".equals(elements.get(5).getPropertyName())
&& "createTime".equals(elements.get(6).getPropertyName())
&& "updateBy".equals(elements.get(7).getPropertyName())
&& "updateTime".equals(elements.get(8).getPropertyName())
){
ArrayList<PropertyData> sortElements = new ArrayList<>();
sortElements.addAll(elements.subList(0, 4));
sortElements.addAll(elements.subList(9, elements.size()));
sortElements.addAll(elements.subList(4, 9));
elements.clear();
elements.addAll(sortElements);
}
}
281

被折叠的 条评论
为什么被折叠?



