3.0 moved order item data into its own tables and left the old access functions working, which means a query written against the old shape returns results and a query written against the new one also does.
// works, and goes through the compatibility layer
wc_get_order_item_meta( $item_id, '_qty', true );
// the object, which is the one to write against now
foreach ( $order->get_items() as $item ) {
$item->get_quantity();
$item->get_product();
}
Direct SQL against wp_woocommerce_order_itemmeta still works this year and is the thing to stop writing, because the compatibility is explicitly temporary. A report joining that table is the most common example, and rewriting it against the objects is slower — which is a real trade and the reason those reports are usually the last thing migrated.