[hibernate-dev] Immutable entities

Hardy Ferentschik hibernate at ferentschik.de
Mon Jun 23 06:12:23 EDT 2008


Hi,

It seems changing an immutable entity does not throw an exception. Instead  
the update statements just gets ignored. However additions/removals to an  
immutable collection throws a HibernateException. Is this correct?

I also changed my test code to do something like this:

	public void testImmutableEntity() throws Exception {
		Session s = openSession();
		Transaction tx = s.beginTransaction();
		Country country = new Country();
		country.setName("Germany");
		s.persist(country);
		tx.commit();
		s.close();

		// try changing the entity
		s = openSession();
		tx = s.beginTransaction();
		Country germany = (Country) s.get(Country.class, country.getId());
		assertNotNull(germany);
		germany.setName("France");
		assertEquals("Local name can be changed", "France", germany.getName());
		s.save(germany);
		tx.commit();
		s.close();
		
		// retrieving the country again - it should be unmodified
		s = openSession();
		tx = s.beginTransaction();
		germany = (Country) s.get(Country.class, country.getId());
		assertNotNull(germany);
		assertEquals("Name should not have changed", "Germany",  
germany.getName());
		s.close();
		
//		// try deletion
//		s = openSession();
//		tx = s.beginTransaction();
//		s.delete(germany);
//		tx.commit();
//		s.close();
//		
//		s = openSession();
//		tx = s.beginTransaction();
//		germany = (Country) s.get(Country.class, country.getId());
//		assertNotNull(germany);
//		assertEquals("Name should not have changed", "Germany",  
germany.getName());
//		s.close();
	}

Changes to the entity seem to be properly ignored, but if I comment out  
the attempt to delete an entity the test fails. Personally I think it  
should be possible to delete the entity, however the documentation says:  
"may not be updated or deleted by the application".

So my questions really are:

1. Is it correct that an immutable entity behaves differently than an  
immutable collection? For the former update statements just get ignored,  
for the latter a HibernateException is thrown.

2. Is the documetnation of immutable wrong - an immutable entity can be  
deleted?

--Hardy






More information about the hibernate-dev mailing list