Topic 4- 3 States of objects in hibernate and Generators

image 2

Play Store Application link – Hibernate – in 10 steps – Apps on Google Play

Hibernate object states-

5
StateDefinitionExampleCode Snippet
TransientA transient object is an object that is not associated with a Hibernate session and has no representation in the database.A new instance of an entity class that has not been saved to the database yetPerson p = new Person();
PersistentA persistent object is an object that is associated with a Hibernate session and has a representation in the database.

Either saved in database
[using save, saveOrUpdate, persist, merge etc method]
or retrieved from the database [using get, load etc method]
An instance of an entity class that has been retrieved from the database using a Hibernate sessionPerson p = session.get(Person.class, 1);
DetachedWhen the session was closed, the state changes to detached.

or evict() , clear() etc methods are applied, The object is detached from its session.
An instance of an entity class that was retrieved from the database using a Hibernate session, but the session has been closedPerson p = session.get(Person.class, 1); <br> session.close(); <br> p.setName("John Doe");

Generators –

Hibernate XML vs. Annotation-Based Generators – Common Strategies

StrategyXML (generator class)Annotation (@GeneratedValue)Usage (What it Does?)Example in XMLExample in Annotation
Auto<generator class="native"/>GenerationType.AUTOHibernate automatically selects the best strategy based on the database.<id name="id"><generator class="native"/></id>@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
Identity<generator class="identity"/>GenerationType.IDENTITYUses database’s auto-increment feature (MySQL, SQL Server). The database generates the primary key.<id name="id"><generator class="identity"/></id>@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
Sequence<generator class="sequence"/>GenerationType.SEQUENCEUses a database sequence to generate unique IDs (Recommended for PostgreSQL, Oracle).<id name="id"><generator class="sequence"/><param name="sequence">my_seq</param></id>@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="my_seq") @SequenceGenerator(name="my_seq", sequenceName="my_seq") private Long id;
Table<generator class="table"/>GenerationType.TABLEUses a separate table to store and generate unique IDs (Slower but database-independent).<id name="id"><generator class="table"/></id>@Id @GeneratedValue(strategy = GenerationType.TABLE) private Long id;
Assigned(Default, No Generator Needed)No @GeneratedValue usedManually set the ID. Hibernate does not generate it.<id name="id" type="long"/> (No generator)@Id private Long id; (No @GeneratedValue)