Just pick and stick with one. Standards are just in the end guidelines and every implementer can implement or fail to implement the standards accordingly.
e.g.
EclipseLink has issues using something basic such as JPA @Converter
s though supposedly recently fixed through IBM http://www-01.ibm.com/support/docview.wss?uid=swg1PI73277
Hibernate's JPQL implementation does not understand boolean values that stand on their own more specifically I had to change my JPQL to say
from Participant p where not p.cancelled
to
from Participant p where p.cancelled = false
The other thing is you're building things in Spring and you're likely going to do the improper but common approach of changing the class loader to PARENT_LAST
order so your classes are used rather than the application servers.
If you plan to do the proper way and use the JPA that comes with the application server just be a bit wary in that your Application Server implementation may be buggy.
Transaction wise your application, specifically Spring must handle things for you.