JPA is a specification for data persistence with Java applications. Hibernate is an implementation of this specification. The JPA specification defines two important principles - that JPA engines should be pluggable and able to run outside of an EJB container. Hibernate Core is the foundational module that other Hibernate modules like Hibernate Annotations and Hibernate EntityManager are built upon. It provides the base persistence services using its native API or XML mappings and includes features like the HQL query language.