Java Code Examples for org.hibernate.classic.Session#lock()

The following examples show how to use org.hibernate.classic.Session#lock() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: FooBarTest.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
public void testVersioning() throws Exception {
	Session s = openSession();
	Transaction txn = s.beginTransaction();
	GlarchProxy g = new Glarch();
	s.save(g);
	GlarchProxy g2 = new Glarch();
	s.save(g2);
	Serializable gid = s.getIdentifier(g);
	Serializable g2id = s.getIdentifier(g2);
	g.setName("glarch");
	txn.commit();
	s.close();

	getSessions().evict(Glarch.class);

	s = openSession();
	txn = s.beginTransaction();
	g = (GlarchProxy) s.load( Glarch.class, gid );
	s.lock(g, LockMode.UPGRADE);
	g2 = (GlarchProxy) s.load( Glarch.class, g2id );
	assertTrue( "version", g.getVersion()==1 );
	assertTrue( "version", g.getDerivedVersion()==1 );
	assertTrue( "version", g2.getVersion()==0 );
	g.setName("foo");
	assertTrue(
		"find by version",
		s.find("from Glarch g where g.version=2").size()==1
	);
	g.setName("bar");
	txn.commit();
	s.close();

	getSessions().evict(Glarch.class);

	s = openSession();
	txn = s.beginTransaction();
	g = (GlarchProxy) s.load( Glarch.class, gid );
	g2 = (GlarchProxy) s.load( Glarch.class, g2id );
	assertTrue( "version", g.getVersion()==3 );
	assertTrue( "version", g.getDerivedVersion()==3 );
	assertTrue( "version", g2.getVersion()==0 );
	g.setNext(null);
	g2.setNext(g);
	s.delete(g2);
	s.delete(g);
	txn.commit();
	s.close();
}
 
Example 2
Source File: IJTest.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
public void testFormulaDiscriminator() throws Exception {
	if ( ( getDialect() instanceof OracleDialect ) || ( getDialect() instanceof HSQLDialect ) ) return;
	Session s = getSessions().openSession();
	I i = new I();
	i.setName( "i" );
	i.setType( 'a' );
	J j = new J();
	j.setName( "j" );
	j.setType( 'x' );
	j.setAmount( 1.0f );
	Serializable iid = s.save(i);
	Serializable jid = s.save(j);
	s.flush();
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	j = (J) s.get(I.class, jid);
	i = (I) s.get(I.class, iid);
	assertTrue( i.getClass()==I.class );
	j.setAmount( 0.5f );
	s.lock(i, LockMode.UPGRADE);
	s.flush();
	s.connection().commit();
	s.close();

	s = getSessions().openSession();
	j = (J) s.get(I.class, jid, LockMode.UPGRADE);
	i = (I) s.get(I.class, iid, LockMode.UPGRADE);
	s.flush();
	s.connection().commit();
	s.close();

	s = getSessions().openSession();
	assertTrue( s.find("from I").size()==2 );
	assertTrue( s.find("from J").size()==1 );
	assertTrue( s.find("from I i where i.class = 0").size()==1 );
	assertTrue( s.find("from I i where i.class = 1").size()==1 );
	s.connection().commit();
	s.close();

	s = getSessions().openSession();
	j = (J) s.get(J.class, jid);
	i = (I) s.get(I.class, iid);
	s.delete(j);
	s.delete(i);
	s.flush();
	s.connection().commit();
	s.close();

}
 
Example 3
Source File: IJ2Test.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
public void testUnionSubclass() throws Exception {
	Session s = getSessions().openSession();
	I i = new I();
	i.setName( "i" );
	i.setType( 'a' );
	J j = new J();
	j.setName( "j" );
	j.setType( 'x' );
	j.setAmount( 1.0f );
	Serializable iid = s.save(i);
	Serializable jid = s.save(j);
	s.flush();
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	j = (J) s.get(I.class, jid);
	j = (J) s.get(J.class, jid);
	i = (I) s.get(I.class, iid);
	assertTrue( i.getClass()==I.class );
	j.setAmount( 0.5f );
	s.lock(i, LockMode.UPGRADE);
	s.flush();
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	j = (J) s.get(J.class, jid);
	j = (J) s.get(I.class, jid);
	i = (I) s.get(I.class, iid);
	assertTrue( i.getClass()==I.class );
	j.setAmount( 0.5f );
	s.lock(i, LockMode.UPGRADE);
	s.flush();
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	assertTrue( s.find("from I").size()==2 );
	assertTrue( s.find("from J").size()==1 );
	assertTrue( s.find("from J j where j.amount > 0 and j.name is not null").size()==1 );
	assertTrue( s.find("from I i where i.class = org.hibernate.test.legacy.I").size()==1 );
	assertTrue( s.find("from I i where i.class = J").size()==1 );
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	j = (J) s.get(J.class, jid);
	i = (I) s.get(I.class, iid);
	K k = new K();
	Serializable kid = s.save(k);
	i.setParent(k);
	j.setParent(k);
	s.flush();
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	j = (J) s.get(J.class, jid);
	i = (I) s.get(I.class, iid);
	k = (K) s.get(K.class, kid);
	System.out.println(k + "=" + i.getParent());
	assertTrue( i.getParent()==k );
	assertTrue( j.getParent()==k );
	assertTrue( k.getIs().size()==2 );
	s.flush();
	s.connection().commit();
	s.close();

	getSessions().evict(I.class);

	s = getSessions().openSession();
	assertTrue( s.find("from K k inner join k.is i where i.name = 'j'").size()==1 );
	assertTrue( s.find("from K k inner join k.is i where i.name = 'i'").size()==1 );
	assertTrue( s.find("from K k left join fetch k.is").size()==2 );
	s.connection().commit();
	s.close();

	s = getSessions().openSession();
	j = (J) s.get(J.class, jid);
	i = (I) s.get(I.class, iid);
	k = (K) s.get(K.class, kid);
	s.delete(k);
	s.delete(j);
	s.delete(i);
	s.flush();
	s.connection().commit();
	s.close();

}
 
Example 4
Source File: MasterDetailTest.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
public void testCategories() throws Exception {
	Session s = openSession();
	Category c = new Category();
	c.setName(Category.ROOT_CATEGORY);
	Category c1 = new Category();
	Category c2 = new Category();
	Category c3 = new Category();
	c.getSubcategories().add(c1);
	c.getSubcategories().add(c2);
	c2.getSubcategories().add(null);
	c2.getSubcategories().add(c3);
	s.save(c);
	s.flush();
	s.connection().commit();
	s.close();

	s = openSession();
	Transaction tx = s.beginTransaction();
	s.lock(c, LockMode.UPGRADE);
	Category loaded = (Category) s.load( Category.class, new Long( c3.getId() ) );
	assertTrue( s.contains(c3) );
	assertTrue(loaded==c3);
	assertTrue( s.getCurrentLockMode(c3)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(c)==LockMode.UPGRADE );
	s.flush();
	tx.commit();
	s.close();

	s = openSession();
	loaded = (Category) s.load( Category.class, new Long( c.getId() ) );
	assertFalse( Hibernate.isInitialized( loaded.getSubcategories() ) );
	s.connection().commit();
	s.close();
	s = openSession();
	s.lock(loaded, LockMode.NONE);
	assertTrue( loaded.getSubcategories().size()==2 );
	s.connection().commit();
	s.close();


	s = openSession();
	c = (Category) s.load( Category.class, new Long( c.getId() ) );
	System.out.println( c.getSubcategories() );
	assertTrue( c.getSubcategories().get(0)!=null && c.getSubcategories().get(1)!=null );
	List list = ( (Category) c.getSubcategories().get(1) ).getSubcategories();
	assertTrue( list.get(1)!=null && list.get(0)==null );

	assertTrue(
		s.iterate("from Category c where c.name = org.hibernate.test.legacy.Category.ROOT_CATEGORY").hasNext()
	);
	s.delete(c);
	s.flush();
	s.connection().commit();
	s.close();

}
 
Example 5
Source File: FumTest.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
public void testDeleteOwner() throws Exception {
	Session s = openSession();
	Qux q = new Qux();
	s.save(q);
	Fum f1 = new Fum( fumKey("f1") );
	Fum f2 = new Fum( fumKey("f2") );
	Set set = new HashSet();
	set.add(f1);
	set.add(f2);
	List list = new LinkedList();
	list.add(f1);
	list.add(f2);
	f1.setFum("f1");
	f2.setFum("f2");
	q.setFums(set);
	q.setMoreFums(list);
	s.save(f1);
	s.save(f2);
	s.flush();
	s.connection().commit();
	s.close();

	s = openSession();
	q = (Qux) s.load( Qux.class, q.getKey(), LockMode.UPGRADE );
	s.lock( q, LockMode.UPGRADE );
	s.delete(q);
	s.flush();
	s.connection().commit();
	s.close();

	s = openSession();
	list = s.find("from Fum fum where not fum.fum='FRIEND'");
	assertTrue( "deleted owner", list.size()==2 );
	s.lock( list.get(0), LockMode.UPGRADE );
	s.lock( list.get(1), LockMode.UPGRADE );
	Iterator iter = list.iterator();
	while ( iter.hasNext() ) {
		s.delete( iter.next() );
	}
	s.flush();
	s.connection().commit();
	s.close();
}
 
Example 6
Source File: ParentChildTest.java    From cacheonix-core with GNU Lesser General Public License v2.1 4 votes vote down vote up
public void testLocking() throws Exception {
	Session s = openSession();
	Transaction tx = s.beginTransaction();
	Simple s1 = new Simple(); s1.setCount(1);
	Simple s2 = new Simple(); s2.setCount(2);
	Simple s3 = new Simple(); s3.setCount(3);
	Simple s4 = new Simple(); s4.setCount(4);
	s.save(s1, new Long(1) );
	s.save(s2, new Long(2) );
	s.save(s3, new Long(3) );
	s.save(s4, new Long(4) );
	assertTrue( s.getCurrentLockMode(s1)==LockMode.WRITE );
	tx.commit();
	s.close();

	s = openSession();
	tx = s.beginTransaction();
	s1 = (Simple) s.load(Simple.class, new Long(1), LockMode.NONE);
	assertTrue( s.getCurrentLockMode(s1)==LockMode.READ || s.getCurrentLockMode(s1)==LockMode.NONE ); //depends if cache is enabled
	s2 = (Simple) s.load(Simple.class, new Long(2), LockMode.READ);
	assertTrue( s.getCurrentLockMode(s2)==LockMode.READ );
	s3 = (Simple) s.load(Simple.class, new Long(3), LockMode.UPGRADE);
	assertTrue( s.getCurrentLockMode(s3)==LockMode.UPGRADE );
	s4 = (Simple) s.get(Simple.class, new Long(4), LockMode.UPGRADE_NOWAIT);
	assertTrue( s.getCurrentLockMode(s4)==LockMode.UPGRADE_NOWAIT );

	s1 = (Simple) s.load(Simple.class, new Long(1), LockMode.UPGRADE); //upgrade
	assertTrue( s.getCurrentLockMode(s1)==LockMode.UPGRADE );
	s2 = (Simple) s.load(Simple.class, new Long(2), LockMode.NONE);
	assertTrue( s.getCurrentLockMode(s2)==LockMode.READ );
	s3 = (Simple) s.load(Simple.class, new Long(3), LockMode.READ);
	assertTrue( s.getCurrentLockMode(s3)==LockMode.UPGRADE );
	s4 = (Simple) s.load(Simple.class, new Long(4), LockMode.UPGRADE);
	assertTrue( s.getCurrentLockMode(s4)==LockMode.UPGRADE_NOWAIT );

	s.lock(s2, LockMode.UPGRADE); //upgrade
	assertTrue( s.getCurrentLockMode(s2)==LockMode.UPGRADE );
	s.lock(s3, LockMode.UPGRADE);
	assertTrue( s.getCurrentLockMode(s3)==LockMode.UPGRADE );
	s.lock(s1, LockMode.UPGRADE_NOWAIT);
	s.lock(s4, LockMode.NONE);
	assertTrue( s.getCurrentLockMode(s4)==LockMode.UPGRADE_NOWAIT );

	tx.commit();
	tx = s.beginTransaction();

	assertTrue( s.getCurrentLockMode(s3)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(s1)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(s2)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(s4)==LockMode.NONE );

	s.lock(s1, LockMode.READ); //upgrade
	assertTrue( s.getCurrentLockMode(s1)==LockMode.READ );
	s.lock(s2, LockMode.UPGRADE); //upgrade
	assertTrue( s.getCurrentLockMode(s2)==LockMode.UPGRADE );
	s.lock(s3, LockMode.UPGRADE_NOWAIT); //upgrade
	assertTrue( s.getCurrentLockMode(s3)==LockMode.UPGRADE_NOWAIT );
	s.lock(s4, LockMode.NONE);
	assertTrue( s.getCurrentLockMode(s4)==LockMode.NONE );

	s4.setName("s4");
	s.flush();
	assertTrue( s.getCurrentLockMode(s4)==LockMode.WRITE );
	tx.commit();

	tx = s.beginTransaction();

	assertTrue( s.getCurrentLockMode(s3)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(s1)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(s2)==LockMode.NONE );
	assertTrue( s.getCurrentLockMode(s4)==LockMode.NONE );

	s.delete(s1); s.delete(s2); s.delete(s3); s.delete(s4);
	tx.commit();
	s.close();
}