Persistencia
JDBC y JPA
SQL se ha de ejecutar directamente en la BD. Para usarlo desde un programa es necesario enviarlo.
JDBC permite a una aplicación Java comunicarse con una base de datos relacional mediante sentencias SQL. Cada proveedor de BD proporciona su implementación (o "driver") de JDBC1.
JPA es una especificación para representar un modelo de datos relacional como objetos Java2. Sus implementaciones3 evitan, en gran medida, la necesidad de escribir SQL directamente, que es generado internamente por ellas, y enviado a la BD utilizando JDBC.
Dado que JDBC es un interfaz/contrato, una aplicación Java podría funcionar con diferentes BD relacionales (Oracle, PostgreSQL, etc.) con solo cambiar su "driver" JDBC. En la práctica, cada motor de BD usa un dialecto de SQL diferente que hace que sean necesarios cambios en el código de la aplicación.
Esta técnica se llama ORM, y es aplicable a todos los lenguajes de programación.
EclipseLink es la implementación de referencia, aunque la más popular es Hibernate.