When a class (Product) have 2 collections (I only checked with reversed mapping) of concrete objects (one of MecanicalFeature and one of ElectricalFeature) inheriting from a common class (Feature), finding an existing Product fails (return null).
The entityManager.find generates the following SQL (I replaced useless columns by *) :
FROM Product t0
LEFT OUTER JOIN Feature t3 ON t0.id = t3.PRODUCT_ID
WHERE (t3.disc IS NULL OR t3.disc IN ('Mecanical'))
AND t0.id = 0
ORDER BY t3.PRODUCT_ID ASC
The eager fetching on those collections consider only one collection or only one type of concrete class. A solution would be to have, in the IN clause the list of all possible subtypes of all collections mapped on the target table (‘Mecanical’, ‘Electrical’).