Setting @OrderBy on a ManyToMany or OneToMany relationship field in which a List represents the Many side doesn't work if the session cache is shared. Use one of the following workarounds:
Have the application maintain the order so the List is cached properly.
Refresh the session cache using EntityManager.refresh() if you don't want to maintain the order during creation or modification of the List.
Disable session cache sharing in persistence.xml as follows:
<property name="toplink.cache.shared.default" value="false"/>