Query with 3 tables in native sql with hibernate

177 Views Asked by At

I have 3 tables related with their FK and I trying to do a native query selecting entities joined. I did with 2 tables joined and it worked, but it does not work with 3.

This is my generic method for it

public List<Object[]> select3Tables(String sql, String parameter, 
            String tableAlias, String entityName, String tableAlias2, String path,
            String tableAlias3, String path2){
        Transaction tx = null;
        List<Object[]>returnList = null;
        
        try {
            Query query = session.createNativeQuery(sql)
                    .addEntity(tableAlias, entityName)
                    .addJoin(tableAlias2, path)
                    .addJoin(tableAlias3, path2)
                    .setParameter("parameter", parameter);
            
            returnList = query.getResultList();
            tx.commit();
        } catch (HibernateException e) {
            if(tx!=null) tx.rollback();
            System.err.println(e.getMessage());
            e.printStackTrace();
        }

and here is where I triying to do it.

public List<Compra> selectCompraByPropietario(final String dniPropitario) {

        Compra compra = new Compra();
        String sql = "SELECT * FROM Compras c "
                + "JOIN Montes m ON c.id_compra = m.compraFK_id_compra "
                + "JOIN Propietarios p ON m.propietarioFK_id_propietario = p.id_propietario"
                + "WHERE p.dni =:parameter";
        
        List<Object[]> list = new HibernateSession().select3Tables(sql, dniPropitario, "compras", 
                "backend.entities.Compra", "m", "compras.montes", "m", "propietarios.montes");
        
        for(Object[]listData : list) {
            compra = (Compra) listData[0];
            data.add(compra);
        }
        System.out.println("tamaño de data " + data.size());
        return data;
    }

Currently I´m getting an error "could not determine fetch owner : null"

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: Could not determine fetch owner : null
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1626)
    at org.hibernate.query.Query.getResultList(Query.java:165)
    at backend.HibernateSession.select3Tables(HibernateSession.java:149)
    at backend.repositories.CompraOperations.selectCompraByPropietario(CompraOperations.java:90)
    at backend.MainBackend.main(MainBackend.java:54)
Caused by: org.hibernate.HibernateException: Could not determine fetch owner : null
    at org.hibernate.loader.custom.CustomLoader.determineAppropriateOwnerPersister(CustomLoader.java:292)

any idea what am I doing wrong and how to make it work? Thank you.

1

There are 1 best solutions below

1
On

I have faced quite similar problems like you Everything seems fine to me. Just add a space after + "JOIN Propietarios p ON m.propietarioFK_id_propietario = p.id_propietario" Write it as + "JOIN Propietarios p ON m.propietarioFK_id_propietario = p.id_propietario "

Hope this helps