Immutable entities should still be deletable.  Unless Gail changed that 
during the consolidation with making a particular entity instance "read 
only" as part of a session.  There was a lot of discussion at that time 
wrt consistency between these two things.  I forget all the outcomes.  
But immutable used to mean it could still be deleted.

HQL bulk deletes and updates circumvent normal modes of operation at 
many levels, caching being one of them.  It interacts with the cache in 
a much different way than a normal Session.delete.

Marking an entity with a cache access strategy of read-only is a bit 
different semantic.

+1000 about test method independence.  This has bitten us over and over 
again.

On Fri 09 Mar 2012 01:24:57 AM CST, Strong Liu wrote:
> Hi There,
>
> is an immutable entity can be deleted?
>
> according to 
> http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html_single/
>
> "12.1.1. Entities of immutable classes"
>
> "An entity of an immutable class can created and deleted the same as an 
> entity of a mutable class."
>
> but "5.1.1 Entity" saying:
>
> "Some entities are not mutable. They cannot be updated or deleted by the 
> application. This allows Hibernate to make some minor performance 
> optimizations.. Use the @Immutable annotation."
>
> the reason i'm asking this is this test 
> org.hibernate.test.annotations.entity.BasicHibernateAnnotationsTest#testPolymorphism.
>
> when running testsuite on jdk 7, the order of methods returned by 
> getDeclaredMethods changed and can vary from run to run 
> (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7023180), so, the order 
> of each test case in a test class can't be guaranteed.
>
> so, we need each test case independent.
>
> clearly, this test case depends on the order.
>
> I added a cleanupTest method
>
>       @Override
>       protected void cleanupTest() throws Exception {
>               Session s = openSession();
>               s.beginTransaction();
>               List list = s.createQuery( "from java.lang.Object" ).list();
>               for(Object obj :  list){
>                       s.delete( obj );
>               }
>               s.getTransaction().commit();
>               s.close();
>       }
>
> and get this exception:
>
> java.lang.UnsupportedOperationException: Can't write to a readonly object
>       at 
> org.hibernate.testing.cache.ReadOnlyEntityRegionAccessStrategy.lockItem(ReadOnlyEntityRegionAccessStrategy.java:68)
>       at 
> org.hibernate.action.internal.EntityDeleteAction.execute(EntityDeleteAction.java:84)
>       at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
>       at 
> org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
>       at 
> org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:280)
>       at 
> org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
>       at 
> org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
>       at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1127)
>       at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:325)
>       at 
> org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
>       at 
> org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
>       at 
> org.hibernate.test.annotations.entity.BasicHibernateAnnotationsTest.cleanupTest(BasicHibernateAnnotationsTest.java:105)
>       
>
> btw, i'm also seeing this jira https://hibernate.onjira.com/browse/HHH-6329
>
> change the cleanupTest to use hql (s.createQuery("delete 
> java.lang.Object").executeUpdate();) runs successfully and no test failure.
>
> -------------------------
> Best Regards,u
>
> Strong Liu<stliu at hibernate.org>
> http://about.me/stliu/bio
>
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev

-- 
st...@hibernate.org
http://hibernate.org
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to