I have thoroughly studied this part of the code, and came to the conclusion that the whole short name thing is broken on oracle. I don't see how it could not be.
See https://github.com/ezsystems/ezpublish-legacy-ee/blob/stable-4.7/kernel/classes/ezpersistentobject.php#L79. This is where a row provided to initialize a persistent object is checked for short_name. The short name is a shortened name for a field, a workaround that "fixes" limited size of field names in certain RDBMS (oracle, postgresql...).
The loop checks if there is a short_name for the PO's attribute. If there is, it uses the short_name to read from the provided $row. This implies that we should use the short name, not the normal one, as the key when initializing a persistent object. We don't. Not for eZEnumObjectValue, nor for eZURLObjectLink (the only 2 persistent objects that use this feature).
On the other hand, I guess that the logic in setAttribute isn't flawed, which explains why the customer's patch works.