public MappedDrink createNewDrink(final int typeId, final float cost, final int userId) {
        MappedDrink result = new MappedDrink();
     
        try {
            insertLock.lock();
            final String query = Conca.t(
                    "insert into drink ",
                    "(date_consumed, cost, drinkTypeFk, userFk) ",
                    "VALUES ",
                    "(?, ?, ?, ?)"
            );
            
            final List<Object> values = new ArrayList<Object>();
            final List<Class<?>> types = new ArrayList<Class<?>>();
    
            values.add(new Date());
            types.add(Date.class);
            
            values.add(cost);
            types.add(Float.class);
            
            values.add(typeId);
            types.add(Integer.class);
            
            values.add(userId);
            types.add(Integer.class);
            
            try {
                int rows = executeUpdate(query, values, types);
                final boolean success = (rows == 1);
                
                if (success) {
                    final String lastInserttedIdQuery = "select last_insert_id()";
                    final ResultSet rs = execute(lastInserttedIdQuery, Collections.emptyList(), new ArrayList<Class<?>>());
                    if (rs.next()) {
                        result = findDrinkById(rs.getInt(1));
                    }
                }
            
            } catch (Exception e) {
                log4jLogger.error(
                    Conca.t(
                        "error occurred while attempting to insert new drink. ",
                        "userid [", userId, "] typeId [", typeId, "] cost [", cost, "]"
                    ), 
                    e
                );
            }
        } finally {
            insertLock.unlock();
        }
        
        return result;
    }