## Aggregated Hibernate Core JavaDocs

Hibernate provides both

- a native API comprised mainly of {@link org.hibernate.SessionFactory} and {@link org.hibernate.Session}
- an implementation of the JSR-317 Java Persistence API (JPA) specification comprised mainly of {@link org.hibernate.ejb.EntityManagerFactoryImpl} and {@link org.hibernate.ejb.EntityManagerImpl}

### Native API

In addition to {@link org.hibernate.SessionFactory} and {@link org.hibernate.Session}, applications using the native API will often need to utilize the following interfaces:

- {@link org.hibernate.cfg.Configuration}
- {@link org.hibernate.Hibernate}
- {@link org.hibernate.Transaction}
- {@link org.hibernate.Query}
- {@link org.hibernate.Criteria}
- {@link org.hibernate.criterion.Projection}
- {@link org.hibernate.criterion.Projections}
- {@link org.hibernate.criterion.Criterion}
- {@link org.hibernate.criterion.Restrictions}
- {@link org.hibernate.criterion.Order}
- {@link org.hibernate.criterion.Example}

These interfaces are fully intended to be exposed to application code.

### JPA

The JPA interfaces are all defined by the JPA specification. For details see {@link javax.persistence}

### Extensions

Hibernate defines a number of interfaces that are completely intended to be extendable by application programmers and/or integrators. Listed below is a (not necessarily exhaustive) list of the most commonly utilized extension points:

- {@link org.hibernate.EntityNameResolver}
- {@link org.hibernate.Interceptor} / {@link org.hibernate.EmptyInterceptor}
- {@link org.hibernate.Transaction} / {@link org.hibernate.transaction.TransactionFactory}
- {@link org.hibernate.context.CurrentSessionContext}
- {@link org.hibernate.dialect.Dialect}
- {@link org.hibernate.dialect.resolver.DialectResolver}
- {@link org.hibernate.event event listener} interfaces
- {@link org.hibernate.id.IdentifierGenerator}
- {@link org.hibernate.tuple.entity.EntityTuplizer} / {@link org.hibernate.tuple.component.ComponentTuplizer}
- {@link org.hibernate.type.Type} / {@link org.hibernate.usertype}

Note that there is a large degree of crossover between the notion of extension points and that of an integration SPI (below).

### Integration SPI

Hibernate provides a number of SPIs intended to integrate itself with various third party frameworks or application code to provide additional capabilities. The SPIs fall mainly into 2 categories:

- Caching - {@link org.hibernate.cache.RegionFactory}
- JDBC Connection management - {@link org.hibernate.connection.ConnectionProvider}

Certainly {@link org.hibernate.dialect.Dialect} could fit in here as well, though we chose to list it under extensions since application developers tend to provide extended dialects rather frequently for various reasons.
Another SPI that is not yet exposed but is planned for such is the bytecode provider SPI. See {@link org.hibernate.bytecode} for details.

Complete Hibernate documentation may be found online at http://docs.jboss.org/hibernate/.