public MappedDrink findDrinkById(final int drinkId) {
        final MappedDrink result = new 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) ",
                "where d.id = ? "
            );
            
            final List<Object> values = new ArrayList<Object>();
            final List<Class<?>> types = new ArrayList<Class<?>>();

            values.add(drinkId);
            types.add(Integer.class);
            
            try {
                final ResultSet rs = execute(query, values, types);
                
                if (rs.next()) {
                    result.setDrinkId(rs.getInt("drinkId"));
                    result.setDateConsumed(rs.getDate("dateConsumed"));
                    result.setCost(rs.getFloat("cost"));
                  
                    final MappedDrinkType type = result.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);
                    
                    result.getUser().setId(rs.getInt("userId"));
                    result.getUser().setUsername(rs.getString("username"));
                    result.getUser().setActive(rs.getInt("active") == 1);
                }
                
            } catch (Exception e) {
                log4jLogger.error(Conca.t("error occurred while attempting to find drink for id [", drinkId, "]"), e);
            }
        
        return result;
    }