Skip to main content

Hibernate Object Conversations

Session methods to use for object conversations

A new instance being attached to the session. An insert will be scheduled.

Call Update to make a transient object persistent again. It will force a SQL update on the transient object. This is because Hibernate does not know whether the object is dirty or not and to be safe by default schedules an update.
This method will throw an exception, if the entity is already registered with the session. - NonUniqueObjectException is thrown.

Either a save or an update will be called based on whether the identifier exists or not. No identifier - save is called, else update is called. Or for a better understanding, if the object is transient, then a save is called, if the object is persistent, then an update is called.

Reattaching an unmodified instance -
If you know for sure that an object is not modified and you just want to make it persistent again -
Session.lock(item, LockMode.None) or the newer way is
Changes made before lock is called is not propogated to the database. If there are any changes made after that call, then an update will be scheduled.

If an entity already exists in the session, the detached instance values are copied into the existing entity of the session.
If the entity does not exist in the session, a get() is called and the entity is loaded, then the detached instance values are copied.
If the entity does not exist in the DB, then a new instance is created.

The merged instance - the persistent instance is returned back, hence do not use the detached instance thereafter.

Hibernate will re-read the data from the database, if you believe something could have changed the state of the object in the DB.


Popular posts from this blog

JUnit – Run unit test in an Sequence / Order

In JUnit, we can use @FixMethodOrder( to run the test methods in a sequence or order.

import org.junit.FixMethodOrder;import org.junit.Test;import org.junit.runners.MethodSorters;importstatic;importstatic org.junit.Assert.assertThat;//Sorts by method name@FixMethodOrder(MethodSorters.NAME_ASCENDING)publicclassExecutionOrderTest{@TestpublicvoidtestB(){assertThat(1+1,is(2));}@Testpublicvoidtest1(){assertThat(1+1,is(2));}@TestpublicvoidtestA

Create Runnable Jar - Eclipse Options

When exporting to a Runnable Jar, there are three options in eclipse Helios. Extract required libraries into JARPackage required libraries into JARCopy required libraries into sub folder next to JAR. What are differences : Extract required libraries into JAR - Extracts the actual .class files from the libraries your app uses and puts those .class files inside the runnable JAR. So, the runnable JAR will not only contain the .class files of your application, but also the .class files of all the libraries your application uses. Package required libraries into JAR - Puts the actual JAR files of the libraries into your runnable JAR. Normally, a JAR file within a JAR file cannot be loaded by the JVM. But Eclipse adds special classes to the runnable JAR to make this possible. Copy required libraries into sub folder next to JAR - Keeps the library JARs completely separate from the runnable JAR, so the runnable JAR will only contain the .class files of your application. Option #2 is convenient be…