Невозможно получить отношения OneToMany с использованием критериев гибернации

Я пытаюсь получить 5 свойств из базы данных. Я могу получить все 4 исключения отношения OneToMany.

Dua.class

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "DUA_DATA_FIL_ID")
@LazyCollection(LazyCollectionOption.TRUE)
@Fetch(FetchMode.SELECT)
private List<DuaDataFileYearVO> duaDataFileYearList = new ArrayList<DuaDataFileYearVO>();

Критерии гибернации

    public DuaDataFileShipListObj getDuaInfoForShipping(String duaNumber, DisseminatorListObj disseminatorCodeListObj,
        int index) {

        DuaDataFileShipListObj dataFileShipList = null;
        List<DuaDataFileShipVO> dataFileShipVO = new ArrayList<DuaDataFileShipVO>();
        List<DuaDataFileVO> dataFileVOs = new ArrayList<DuaDataFileVO>();
        Session session = null;
        try {
            session = getSessionFactory().openSession();

            Criteria criteria = session.createCriteria(DuaDataFileVO.class, "dataFile");
            criteria.add(Restrictions.eq("duaNum", duaNumber))
            // .add(Restrictions.eq("duaDataFileYearList.duaDataFileId", 677L))
                    .add(Restrictions.in("dataDisseminatorCode", disseminatorCodeListObj.getDisseminatorCodes()));

            criteria.createAlias("dataFile.refDataFileExtractingPCTVO", "refDataFileExtractingPCTVO")
                    .createAlias("dataFile.refDataFileVO", "refDataFileVO")
                    .createAlias("dataFile.duaDataFileYearList", "duaDataFileYearList").list();

            criteria.setProjection(Projections.projectionList()
                    .add(Projections.property("duaDataFileId"), "duaDataFileId")
                    .add(Projections.property("dataDisseminatorCode"), "dataDisseminatorCode")
                    .add(Projections.property("refDataFileExtractingPCTVO"), "refDataFileExtractingPCTVO")
                    .add(Projections.property("refDataFileVO"), "refDataFileVO"));
            // criteria.setFirstResult(0);
            criteria.setMaxResults(index);
            criteria.setResultTransformer(Transformers.aliasToBean(DuaDataFileVO.class));


            dataFileVOs = criteria.list();

1 ответ

Решение

С первого взгляда на ваш вопрос похоже, что вы пытаетесь получить недвижимость: duaDataFileYearList, В вашем projectionList я не вижу этого свойства, в то время как остальные четыре включены.

Обновление: еще один способ, которым вы могли бы сделать это, это захватить весь DuaDataFileVO объект, который вы хотите, а затем получить DuaDataFileVO.duaDateFileYearList свойство оттуда, вместо того, чтобы пытаться получить сущность по свойствам.

Другие вопросы по тегам