JPAはSQLの方言の差異を吸収するけど、具体的に何を吸収してくれるのか。ちょっと整理。
ページングの構文の違い
たとえば、Oracleだとrownumと副問い合わせを組み合わせて実現するけど、MySQLだとlimit/offsetを使うとか。
ファンクションの違い(文字列操作、日付など)
たとえば、JPAでconcat関数を使うと、Oracleは「||」で文字列連結するけど、SQLServerだと「+」で文字列連結するとか。
悲観的ロックの構文の違い
JPAとしてはサポートされていないけど、HibernateやToplink Essentialsでは使えるから事実上サポートされているとみなしていいと思う。
たとえば、Oracleだと「for update」がSELECT文に追加されて、SQLServerだとだと「with (updlock, rowlock)」がSELECT文に挿入されるとか。
代表的なものはこんなものだと思う。主キーの自動生成についてもいろんな工夫がされているけど、Tableを使った自動生成を使うとどのRDBMSでも一緒なのであえてここでは挙げない。