AppSensei
AppSensei

Reputation: 8400

Unable to fetch OneToMany relationship using Hibernate Criteria

I'm trying to get 5 properties from the Database. I'm able to get all the 4 exception the OneToMany relation. enter image description here

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>();

Hibernate Criteria

    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();

Upvotes: 0

Views: 46

Answers (1)

ballBreaker
ballBreaker

Reputation: 722

From first glance at your question it looks like you are trying to get property: duaDataFileYearList . In your projectionList I don't see this property included, while the other four are.

Update: Another way you could accomplish this, is to grab the entire DuaDataFileVO object you want, and then get the DuaDataFileVO.duaDateFileYearList property from there, instead of trying to get the entity by the properties.

Upvotes: 1

Related Questions