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

Reply via email to