protected void configureSession() { if (unitOfWork == null || session == null) { throw new NullPointerException("unitOfWork or session is null. This is a bug!"); } session.setDefaultReadOnly(unitOfWork.readOnly()); session.setCacheMode(unitOfWork.cacheMode()); session.setHibernateFlushMode(unitOfWork.flushMode()); }
private DataPoint createDataPoint(CacheMode cacheMode) { Session s = openSession(); s.setCacheMode( cacheMode ); s.beginTransaction(); DataPoint dp = new DataPoint(); dp.setX( new BigDecimal( 0.1d ).setScale(19, BigDecimal.ROUND_DOWN) ); dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) ); dp.setDescription( "original" ); s.save( dp ); s.getTransaction().commit(); s.close(); return dp; }
@Test public void testReadOnlyGetModifyAndDelete() { Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); Transaction t = s.beginTransaction(); DataPoint dp = new DataPoint(); dp.setX( new BigDecimal(0.1d).setScale(19, BigDecimal.ROUND_DOWN) ); dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) ); s.save(dp); t.commit(); s.close(); s = openSession(); s.setDefaultReadOnly( true ); s.setCacheMode(CacheMode.IGNORE); t = s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dp.getId() ); s.setDefaultReadOnly( true ); dp.setDescription( "a DataPoint" ); s.delete( dp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); List list = s.createQuery("from DataPoint where id=" + dp.getId() ).list(); assertTrue( list.isEmpty() ); t.commit(); s.close(); }
@Test public void testReadOnlyDelete() { Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); Transaction t = s.beginTransaction(); DataPoint dp = new DataPoint(); dp.setX( new BigDecimal(0.1d).setScale(19, BigDecimal.ROUND_DOWN) ); dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) ); s.save(dp); t.commit(); s.close(); s = openSession(); s.setDefaultReadOnly( true ); s.setCacheMode(CacheMode.IGNORE); t = s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dp.getId() ); s.setDefaultReadOnly( false ); assertTrue( s.isReadOnly( dp ) ); s.delete( dp ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); List list = s.createQuery("from DataPoint where id=" + dp.getId() ).list(); assertTrue( list.isEmpty() ); t.commit(); s.close(); }
@Test public void testMergeWithReadOnlyEntity() { Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); Transaction t = s.beginTransaction(); DataPoint dp = new DataPoint(); dp.setX( new BigDecimal(0.1d).setScale(19, BigDecimal.ROUND_DOWN) ); dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) ); s.save(dp); t.commit(); s.close(); dp.setDescription( "description" ); s = openSession(); s.setCacheMode(CacheMode.IGNORE); t = s.beginTransaction(); s.setDefaultReadOnly( true ); DataPoint dpManaged = ( DataPoint ) s.get( DataPoint.class, new Long( dp.getId() ) ); DataPoint dpMerged = ( DataPoint ) s.merge( dp ); assertSame( dpManaged, dpMerged ); t.commit(); s.close(); s = openSession(); t = s.beginTransaction(); dpManaged = ( DataPoint ) s.get( DataPoint.class, new Long( dp.getId() ) ); assertNull( dpManaged.getDescription() ); s.delete( dpManaged ); t.commit(); s.close(); }
@Test public void testReadOnlyDelete() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); checkReadOnly( s, dp, false ); s.setReadOnly( dp, true ); checkReadOnly( s, dp,true ); assertFalse( Hibernate.isInitialized( dp )); s.delete( dp ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertNull( dp ); s.getTransaction().commit(); s.close(); }
@Test public void testSetReadOnlyAfterSessionClosed() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); s.getTransaction().commit(); s.close(); try { s.setReadOnly( dp, true ); fail( "should have failed because session was closed" ); } catch ( IllegalStateException ex) { // expected assertFalse( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnlySettingAvailable() ); } finally { s = openSession(); s.beginTransaction(); s.delete( dp ); s.getTransaction().commit(); s.close(); } }
@Test public void testIsReadOnlyAfterSessionClosed() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); s.getTransaction().commit(); s.close(); try { s.isReadOnly( dp ); fail( "should have failed because session was closed" ); } catch ( IllegalStateException ex) { // expected assertFalse( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnlySettingAvailable() ); } finally { s = openSession(); s.beginTransaction(); s.delete( dp ); s.getTransaction().commit(); s.close(); } }
@Test public void testModifiableViaSessionBeforeInit() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); checkReadOnly( s, dp, false ); dp.setDescription( "changed" ); assertTrue( Hibernate.isInitialized( dp ) ); assertEquals( "changed", dp.getDescription() ); checkReadOnly( s, dp, false ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertEquals( dpOrig.getId(), dp.getId() ); assertEquals( "changed", dp.getDescription() ); assertEquals( dpOrig.getX(), dp.getX() ); assertEquals( dpOrig.getY(), dp.getY() ); s.delete( dp ); s.getTransaction().commit(); s.close(); }
@Test public void testReadOnlyViaSessionBeforeInit() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); s.setReadOnly( dp, true ); dp.setDescription( "changed" ); assertTrue( Hibernate.isInitialized( dp ) ); assertEquals( "changed", dp.getDescription() ); checkReadOnly( s, dp, true ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertEquals( dpOrig.getId(), dp.getId() ); assertEquals( dpOrig.getDescription(), dp.getDescription() ); assertEquals( dpOrig.getX(), dp.getX() ); assertEquals( dpOrig.getY(), dp.getY() ); s.delete( dp ); s.getTransaction().commit(); s.close(); }
s.setCacheMode(CacheMode.IGNORE);
@Test public void testModifiableViaLazyInitializerAfterInit() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); LazyInitializer dpLI = ( ( HibernateProxy ) dp ).getHibernateLazyInitializer(); assertTrue( dpLI.isUninitialized() ); checkReadOnly( s, dp, false ); dp.setDescription( "changed" ); assertFalse( dpLI.isUninitialized() ); assertEquals( "changed", dp.getDescription() ); checkReadOnly( s, dp, false ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertEquals( dpOrig.getId(), dp.getId() ); assertEquals( "changed", dp.getDescription() ); assertEquals( dpOrig.getX(), dp.getX() ); assertEquals( dpOrig.getY(), dp.getY() ); s.delete( dp ); s.getTransaction().commit(); s.close(); }
@Test public void testModifiableViaSessionBeforeInitByModifiableQuery() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); DataPoint dpFromQuery = ( DataPoint ) s.createQuery( "from DataPoint where id=" + dpOrig.getId() ).setReadOnly( false ).uniqueResult(); assertTrue( Hibernate.isInitialized( dpFromQuery ) ); assertSame( dp, dpFromQuery ); checkReadOnly( s, dp, false ); dp.setDescription( "changed" ); assertEquals( "changed", dp.getDescription() ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertEquals( dpOrig.getId(), dp.getId() ); assertEquals( "changed", dp.getDescription() ); assertEquals( dpOrig.getX(), dp.getX() ); assertEquals( dpOrig.getY(), dp.getY() ); s.delete( dp ); s.getTransaction().commit(); s.close(); }
@Test public void testModifiableViaSessionBeforeInitByReadOnlyQuery() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); checkReadOnly( s, dp, false ); assertFalse( Hibernate.isInitialized( dp ) ); DataPoint dpFromQuery = ( DataPoint ) s.createQuery( "from DataPoint where id=" + dpOrig.getId() ).setReadOnly( true ).uniqueResult(); assertTrue( Hibernate.isInitialized( dpFromQuery ) ); assertSame( dp, dpFromQuery ); checkReadOnly( s, dp, false ); dp.setDescription( "changed" ); assertEquals( "changed", dp.getDescription() ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertEquals( dpOrig.getId(), dp.getId() ); assertEquals( "changed", dp.getDescription() ); assertEquals( dpOrig.getX(), dp.getX() ); assertEquals( dpOrig.getY(), dp.getY() ); s.delete( dp ); s.getTransaction().commit(); s.close(); }
@Test public void testModifiableViaLazyInitializerBeforeInit() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); LazyInitializer dpLI = ( ( HibernateProxy ) dp ).getHibernateLazyInitializer(); assertTrue( dp instanceof HibernateProxy ); assertTrue( dpLI.isUninitialized() ); checkReadOnly( s, dp, false ); dp.setDescription( "changed" ); assertFalse( dpLI.isUninitialized() ); assertEquals( "changed", dp.getDescription() ); checkReadOnly( s, dp, false ); s.flush(); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); dp = ( DataPoint ) s.get( DataPoint.class, dpOrig.getId() ); assertEquals( dpOrig.getId(), dp.getId() ); assertEquals( "changed", dp.getDescription() ); assertEquals( dpOrig.getX(), dp.getX() ); assertEquals( dpOrig.getY(), dp.getY() ); s.delete( dp ); s.getTransaction().commit(); s.close(); }
s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) );
@Test public void testDetachedIsReadOnlyAfterEvictViaLazyInitializer() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); s.evict( dp ); assertFalse( s.contains( dp ) ); assertNull( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().getSession() ); try { ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnly(); fail( "should have failed because proxy was detached" ); } catch ( TransientObjectException ex) { // expected assertFalse( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnlySettingAvailable() ); } finally { s.delete( dp ); s.getTransaction().commit(); s.close(); } }
@Test public void testDetachedSetReadOnlyAfterEvictViaLazyInitializer() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); s.evict( dp ); assertFalse( s.contains( dp ) ); assertNull( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().getSession() ); try { ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().setReadOnly( true ); fail( "should have failed because proxy was detached" ); } catch ( TransientObjectException ex) { // expected assertFalse( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnlySettingAvailable() ); } finally { s.delete( dp ); s.getTransaction().commit(); s.close(); } }
@Test public void testDetachedSetReadOnlyAfterEvictViaSession() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); assertTrue( s.contains( dp ) ); s.evict( dp ); assertFalse( s.contains( dp ) ); assertNull( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().getSession() ); try { s.setReadOnly( dp, true ); fail( "should have failed because proxy was detached" ); } catch ( TransientObjectException ex) { // expected assertFalse( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnlySettingAvailable() ); } finally { s.delete( dp ); s.getTransaction().commit(); s.close(); } }
@Test public void testDetachedIsReadOnlyAfterEvictViaSession() { DataPoint dpOrig = createDataPoint( CacheMode.IGNORE ); Session s = openSession(); s.setCacheMode(CacheMode.IGNORE); s.beginTransaction(); DataPoint dp = ( DataPoint ) s.load( DataPoint.class, new Long( dpOrig.getId() ) ); assertTrue( dp instanceof HibernateProxy ); assertFalse( Hibernate.isInitialized( dp ) ); checkReadOnly( s, dp, false ); assertTrue( s.contains( dp ) ); s.evict( dp ); assertFalse( s.contains( dp ) ); assertNull( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().getSession() ); try { s.isReadOnly( dp ); fail( "should have failed because proxy was detached" ); } catch ( TransientObjectException ex) { // expected assertFalse( ( ( HibernateProxy ) dp ).getHibernateLazyInitializer().isReadOnlySettingAvailable() ); } finally { s.delete( dp ); s.getTransaction().commit(); s.close(); } }