public List<MappedDrink> findAllDrinkForInvoice(final int invoiceId) {
        final List<MappedDrink> drinks = new ArrayList<MappedDrink>();
        final String query = Conca.t(
                "select ",
                "   d.id                            as drinkId, ",
                "   d.date_consumed                 as dateConsumed, ",
                "   d.cost                          as cost, ",
                "   dt.id                           as typeId, ",
                "   dt.name                         as name, ",
                "   dt.descript                     as description, ",
                "   dt.cost_per_ml                  as costPerML, ",
                "   u.id                            as userId, ",
                "   u.username                      as username, ",
                "   u.active                        as active, ",
                "   u2.id                           as c_userId, ",
                "   u2.username                     as c_username, ",
                "   u2.active                       as c_active ",
                "from ",
                "   drink d join drink_type dt on (d.drinkTypeFk = dt.id) ",
                "   join user u on (d.userFk = u.id) ",
                "   join user u2 on (dt.created_by_userFk = u2.id) ",
                "   join invoice i on (d.invoiceFk = i.id) ",
                "where i.id = ? ",
                "   order by dateConsumed desc"
        );  

        final List<Object> values = new ArrayList<Object>();
        final List<Class<?>> types = new ArrayList<Class<?>>();

        values.add(invoiceId);
        types.add(Integer.class);

        try {
            final ResultSet rs = execute(query, values, types);

            while (rs.next()) {
                final MappedDrink eaDrink = new MappedDrink();
                eaDrink.setDrinkId(rs.getInt("drinkId"));
                eaDrink.setDateConsumed(rs.getDate("dateConsumed"));
                eaDrink.setCost(rs.getFloat("cost"));

                final MappedDrinkType type = eaDrink.getType();
                type.setTypeId(rs.getInt("typeId"));
                type.setName(rs.getString("name"));
                type.setDescription(rs.getString("description"));
                type.setCostPerML(rs.getDouble("costPerML"));
                type.getCreatedBy().setId(rs.getInt("c_userId"));
                type.getCreatedBy().setUsername(rs.getString("c_username"));
                type.getCreatedBy().setActive(rs.getInt("c_active") == 1);

                eaDrink.getUser().setId(rs.getInt("userId"));
                eaDrink.getUser().setUsername(rs.getString("username"));
                eaDrink.getUser().setActive(rs.getInt("active") == 1);

                drinks.add(eaDrink);
            }

        } catch (Exception e) {
            log4jLogger.error(Conca.t("error occurred while attempting to find all drink for invoiceId [", invoiceId, "]"), e);
        }

        return drinks;
    }