Wyclif,
Are you Ok with this in DAO

public List<OrderType> getOrderSubtypes(OrderType orderType, boolean includeRetired, List<OrderType> orderTypes) {
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(OrderType.class);
        criteria.add(Restrictions.eq("parent", orderType));
        if (!includeRetired) {
            criteria.add(Restrictions.eq("retired", false));
        }
        List<OrderType> tempList=criteria.list();
        orderTypes.addAll(tempList);
        for(OrderType orderTypeOb:tempList) {
            getOrderSubtypes(orderTypeOb,includeRetired,orderTypes);
        }
        return orderTypes;
    }