To give you hint you can use DetachedCriteria which will atleast result in columns of only JournalLine.class but with subqueries.
Something like
Code:
DetachedCriteria jtDC = DetachedCriteria.forClass( JournalType.class, "jty" );
jtDC.add( Restrictions.ne( "jty.txnNature", JournalType.TxnNature.CASH ) );
jtDC.setProjection( Property.forName( "jty.join_column_name" ) );
DetachedCriteria jDC = DetachedCriteria.forClass( Journal.class, "j" );
jDC.setProjection( Property.forName( "j.join_column_name" ) );
DetachedCriteria jLineCrit = DetachedCriteria.forClass( JournalLine.class, "jLine" );
jLineCrit.add( Property.forName( "jLine.join_column_name" ).eq( jtDC ) );
jLineCrit.add( Property.forName( "jLine.join_column_name" ).eq( jDC ) );
List results = jLineCrit.getExecutableCriteria(session).list();
The snippet may not be correct, atleast it will give you idea how to extract only columns from one persistent class.