There have been numerous questions in regards to the following statement made in a few places on the Hibernate website:

Both Hibernate Annotations and Hibernate EntityManager are part of Hibernate Core as of 3.5.x...

So I wanted to clarify what is meant by that. Previously Hibernate Core, Hibernate Annotations and Hibernate EntityManager were all separate projects, meaning

  • they lived in different Subversion projects
  • they had independent release cycles (and hence independent versioning)
  • they had different Jira projects
  • they had different SubjectMatterExperts

Originally this split (initiate back in Hibernate's 3.0 days) was needed because back then Hibernate was on big source tree which needed to remain JDK 1.4 compliant. Nowadays though, with the modularization of the Hibernate (Core) build it became feasible to pull Annotations and EntityManager back into the same source project since each module can be built with different source and target JDK levels. The biggest win here from the user perspective I think is making the making of the "compatibility matrix" completely obsolete.

This does not mean that Annotations and EntityManager are part of the hibernate-core JAR file as far as the published maven repository artifacts are concerned. Hibernate is still modularized. The main reason for this is to isolate the dependences for each module. This makes it easy for users consuming Hibernate through a maven repo based dependency scheme (Maven, Ivy, Gradle, etc) to manage the transitive dependency tree.

In the distribution bundle (the archives uploaded to the SourceForge File Release System), however, the classes are all combined together into a single jar file. But this happens across all the modules (caching, etc) because that is how it was always done in these distribution bundles.

Hope that clarifies.

Back to top