Hibernate XML Mapping Self Join - невозможно выбрать родительские данные при получении дочернего - PullRequest
0 голосов
/ 20 апреля 2020

Я реализую родительские / дочерние отношения, используя самостоятельное соединение

, в котором одна рабочая группа может иметь другую рабочую группу в качестве дочерней. Следующее отображение правильно сохраняет данные в базе данных, но не может загрузить родительские данные при извлечении заново создал дочернюю рабочую группу.

У меня есть следующие файлы PimWorkGroup.hbm. xml

таблица: pim_workgroup

<hibernate-mapping>
    <class name="PimWorkgroup" table="pim_workgroup" >
        <id name="workgroupId" type="string" unsaved-value="null">
            <column name="workgroup_id"  length="36" />
            <generator class="uuid2"/>
        </id>        
        <properties name="unique_constraint_OwnerParentWorkgroupId_GroupName" unique="true">
            <many-to-one foreign-key="fk_Workgroup_OwnerParentWorkgroup"  lazy="false" name="ownerParentWorkgroup" class="PimWorkgroup" fetch="join">
                <column name="owner_parent_workgroup_id" length="36"  />
            </many-to-one>
            <property name="groupName" type="string">
                <column name="group_name" length="50" not-null="true" />
            </property>
        </properties>

        <set name="subWorkgroups" inverse="false" lazy="false" table="pim_workgroup"  cascade="all">
            <key column="owner_parent_workgroup_id"  />
            <one-to-many class="PimWorkgroup" />
        </set> 
</hibernate-mapping>

@Service Class

    @Service
    public class WorkGroupService {
        @Autowired
        WorkGroupRepository repository;
        public void addWorkGroup(String tenantId, WorkgroupDto inputData) {
            repository.addWorkGroup(dtoToWorkGroup(inputData));
        }

        public PimWorkgroup dtoToWorkGroup(WorkgroupDto dto){
            PimWorkgroup parentWG=new PimWorkgroup();
            parentWG.setWorkgroupId(dto.getOwningParentId());
          //It's A Constructor--public PimWorkgroup(PimWorkgroup ownerParentWorkgroup, String groupName, String description,boolean sharedToParentFlag)
            PimWorkgroup workgroup=new PimWorkgroup(parentWG,dto.getName(),dto.getDescription(),dto.isSharedWorkgroup());
            return workgroup;
        }

    }```


    @Repository
    public class WorkGroupRepositoryImpl implements WorkGroupRepository {

    @Override
    public PimWorkgroup addWorkGroup(PimWorkgroup workgroup) {
            Session session = null;
            Transaction tx = null;
            PimWorkgroup savedWorkGroup=null;
            try {
                session = hibernateUtilWrapperMT.openSession();
                tx = session.beginTransaction();
                session.save(workgroup);
                tx.commit();
                savedWorkGroup = (PimWorkgroup) session.get(PimWorkgroup.class, workgroup.getWorkgroupId());
            }
            } catch (Exception e) {
                if (tx != null)
                    hibernateUtilWrapperMT.rollbackTx(tx);            
            }finally {
                hibernateUtilWrapperMT.closeSession(session);
            }
            return savedWorkGroup;
        }

Database entries

------------------------------------------------------------------------------------------------------------------------------------------------------------------
          workgroup_id                          owner_tenant_id                 owner_parent_workgroup_id                group_name            description  
          ---------------------------------------------------------------------------------------------------------------------------------------------------------
d8bec626-76d9-4c52-83c0-48800252bb49    f7eaef24-95cc-4580-9c82-a4e57cebcbbc    d8bec626-76d9-4c52-83c0-48800252bb49    Parent_Workgroup    Root system workgroup   
------------------------------------------------------------------------------------------------------------------------------------------------------------------
ec7233f9-7e5b-4d8b-bd8d-1440d799a5fb    9d12546b-35a9-4dcc-b95d-c59b2a07d2fa    d8bec626-76d9-4c52-83c0-48800252bb49    Child1               description.   
------------------------------------------------------------------------------------------------------------------------------------------------------------------
bf30e773-97f0-435d-9021-2dd4f2654962    9d12546b-35a9-4dcc-b95d-c59b2a07d2fa    d8bec626-76d9-4c52-83c0-48800252bb49    Child2                description
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

saveWorkGroup = (PimWorkgroup) session.get (PimWorkgroup.class, workgroup.getWorkgroupId ());

Я ожидаю, что он должен вернуть вновь созданную WorkGroup, а также свою родительскую рабочую группу, в которой он создан.

, но в saveWorkGroup для ownerParentWorkgroup он просто загружает свои id остальные поля null .

Кто-то, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, помогите мне с этим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...