I am completely new to Hibernate and Spring and in my attempt to learn Spring, Hibernate, Maven etc I only know how to run a hello world example using all of the three. With my basic understanding I have been assigned a task for performing optimistic locking. As far as I have googled it I can only see it is not very difficult all I need is to add a version tag in my xml and integer variable version in my mapped class.. Like this...
public class MyClass {
...
private int version;
...
}
my xml should be like this
<class name="MyClass">
<id ...>
<version name="version" column="VERSION" access="field">
...
</class>
And hibernate will automatically take care of versioning when second user saves, hibernate finds this user is working on the stale data and throws StaleObjectException.
Just wanted to confirm my understanding, thanks in advance.
It will be really helpful if some one can point me to a hello world example for this.
I would also like to mention that I am trying to implement "last commit wins" scenerio
I used Hibernate annotations and here is my implementation of optimistic locking
@Entity
public class MyObject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String data;
@Version
private Integer version; // this is version field
}
Here is working example
// Entity class with version field
@Entity
public class Ent1 implements Serializable {
private static final long serialVersionUID = -5580880562659281420L;
@Id
Integer a1;
Integer a2;
@Version
private Integer version;
}
And some code to add one element to DB
session = HibernateHelper.getSessionFactory().openSession();
transaction = session.beginTransaction();
Ent1 entity = new Ent1();
entity.setA1(new Integer(0));
entity.setA2(new Integer(1));
session.save(entity);
transaction.commit();
// get saved object and modify it
transaction = session.beginTransaction();
List<Ent1> list = (List<Ent1>)session.createQuery("FROM Ent1 WHERE a1 = 0").list();
Ent1 ent = list.get(0);
ent.setA2(new Integer(1000));
session.save(ent);
transaction.commit();
After creation, new element in DB has version 0. After modifying - version 1.
HibernateHelper.java
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateHelper {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}