
Play Store Application link β Hibernate – in 10 steps – Apps on Google Play
Hibernate object states-

| State | Definition | Example | Code Snippet |
|---|---|---|---|
| Transient | A 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 yet | Person p = new Person(); |
| Persistent | A 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 session | Person p = session.get(Person.class, 1); |
| Detached | When 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 closed | Person p = session.get(Person.class, 1); <br> session.close(); <br> p.setName("John Doe"); |
Generators –
Hibernate XML vs. Annotation-Based Generators β Common Strategies
| Strategy | XML (generator class) | Annotation (@GeneratedValue) | Usage (What it Does?) | Example in XML | Example in Annotation |
|---|---|---|---|---|---|
| Auto | <generator class="native"/> | GenerationType.AUTO | Hibernate 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.IDENTITY | Uses 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.SEQUENCE | Uses 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.TABLE | Uses 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 used | Manually set the ID. Hibernate does not generate it. | <id name="id" type="long"/> (No generator) | @Id private Long id; (No @GeneratedValue) |
