From 98ad760aef4f7b1ac9783ae16e098d748818c8f8 Mon Sep 17 00:00:00 2001 From: Jun Chen Date: Wed, 25 Dec 2019 22:34:49 +0800 Subject: [PATCH] #569 fetch domain object for hibernate proxy multi reference instance --- .../cmdb/service/impl/CiServiceImpl.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cmdb-core/src/main/java/com/webank/cmdb/service/impl/CiServiceImpl.java b/cmdb-core/src/main/java/com/webank/cmdb/service/impl/CiServiceImpl.java index 66fabd5ed..3406c3a6a 100755 --- a/cmdb-core/src/main/java/com/webank/cmdb/service/impl/CiServiceImpl.java +++ b/cmdb-core/src/main/java/com/webank/cmdb/service/impl/CiServiceImpl.java @@ -46,6 +46,8 @@ import org.apache.commons.beanutils.BeanMap; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.hibernate.proxy.HibernateProxy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -588,8 +590,12 @@ private Map enrichCiObject(DynamicEntityMeta entityMeta, Map referCis = (Set) value; + Set referCis = (Set) value; attr = attrMap.get(attrId); + if(InputType.MultRef.getCode().equals(attr.getInputType())) { + referCis = fetchCiDomainObjForMultRef(attr, referCis); + } + DynamicEntityMeta multRefMeta = multRefMetaMap.get(attrId); Map sortMap = JpaQueryUtils.getSortedMapForMultiRef(entityManager, attr, multRefMeta); @@ -604,7 +610,26 @@ private Map enrichCiObject(DynamicEntityMeta entityMeta, Map referCis, Map sortMap) { + private Set fetchCiDomainObjForMultRef(AdmCiTypeAttr attr, Set referCis) { + Integer refCiTypeId = attr.getReferenceId(); + DynamicEntityMeta refEntityMeta = dynamicEntityMetaMap.get(refCiTypeId); + Class refEntityClzz = refEntityMeta.getEntityClazz(); + if(refEntityClzz != null) { + Set realReferCis = new HashSet(); + referCis.forEach(elem -> { + if(elem instanceof HibernateProxy) { + Object domainObj = ((HibernateProxy) elem).getHibernateLazyInitializer().getImplementation(); + realReferCis.add(domainObj); + }else { + realReferCis.add(elem); + } + }); + referCis = realReferCis; + } + return referCis; + } + + private List getSortedMultRefList(Set referCis, Map sortMap) { List ciList = Lists.newLinkedList(); for (Object ci : referCis) { ciList.add(ci);