Embedding Value Types and Collections Within an Entity Class in Hibernate 5

We have already seen the definition and properties of an entity and value class in We will not see how we can actually embed a value type within an entity. We will also see how we can embed a collection inside an entity.


Entities and Value Types in Hibernate 5

An entity is a type on its own and has an existence of its own (e.g. Course, User etc.).

A value type is a type which doesn't have existence of its own, but belongs to an entity (e.g. Address of an User). Value types are always completely owned by their containing entity.


Defining entities and value types in Hibernate

@Entity annotation (javax.persistence.Entity) over the class tell hibernate to treat this class as our entity class that needs to be saved.

Most Common Annotations Used in Hibernate 5

Here we will discuss most commonly used basic annotations in hibernate - @Entity, @Table, @Id, @GeneratedValue, @Column, @Basic, @Transient, @Temporal and @Lob. Even though many annotations has both JPA (java.persistance) and hibernate (org.hibernate) versions, it is preferred to use JPA annotations whenever possible. As you can see below, some of the hibernate specific annotations are already deprecated.


Object States in Hibernate 5

 A java object within a hibernate application can be in one of the three states:

  1. New/transient

  2. Attached/persistent

  3. Detached


Important points about object states in Hibernate

  • When an object is created, it will be in the new/transient state.

    • Hibernate will not save any updates to the transient objects.

CRUD Operations in Hibernate 5

CRUD operations are Create(save), Read(select), Update(update) and Delete(delete).

Examples discussed here need to be tried out on top of the lab done @



Select, Save, update and delete operations in hibernate should be called within a session:

 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Logging in Hibernate 5

You have different logging options in Hibernate and let us see some of those options quickly. Hibernate supports simple property based log enabling to supporting standard logging frameworks and even programmatically accessing log statistics.


First, you can enable showsql property in Hibernate to see the exact query being executed. You can set the property to true in the hibernate.cfg.xml XML configuration file. Please refer to

Configuring a Hibernate 5 Application with JPA Entity Managers

In JPA, the EntityManager controls the lifecycle of the entities.

Different ORM vendors provide its own entity manager, which is usually a wrapper around the core API and thus supports the JPA programming interfaces, life cycles and query language.

You obtain the EntityManager from an entity manager factory. EntityManagerFactory has the same role as SessionFactory in Hibernate.

Different Ways to Configure in Hibernate 5

Before working with hibernate in your code, you will need to configure Hibernate with information regarding your database such as host, port, credentials etc. You also need to create mappings that tell hibernate how to map the state of a Java entity to the columns of its corresponding table.

We can configure various hibernate features either through annotations or through xml files (hbm files). Preferred approach currently is annotations.


You can configure Hibernate mainly in three ways:

[Lab] Your First Hibernate 5 Program

We will write a simple hibernate application to get started with hibernate.

Before starting, you should:

Downloading Hibernate Jar Files

Hibernate 4 jars can be downloaded from the SourceForge web site at or from  If this url doesn’t work or get changed, just search ‘hibernate 4 jars download sourceforge’ in Google.  The distribution version downloaded here is 4.3.11. Except for the version numbers, the jar names and folder structure should be same across any version of hibernate4 distribution.  



Search the Web

Custom Search

Searches whole web. Use the search in the right sidebar to search only within!!!