📄 immutabletest.java
字号:
//$Id: ImmutableTest.java 14801 2008-06-24 19:03:32Z hardy.ferentschik $package org.hibernate.test.annotations.immutable;import java.io.PrintWriter;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import org.hibernate.AnnotationException;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.dialect.SQLServerDialect;import org.hibernate.test.annotations.TestCase;import org.hibernate.test.annotations.fkcircularity.A;import org.hibernate.test.annotations.fkcircularity.B;import org.hibernate.test.annotations.fkcircularity.C;import org.hibernate.test.annotations.fkcircularity.D;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Tests for <code>Immutable</code> annotation. * * @author Hardy Ferentschik */@SuppressWarnings("unchecked")public class ImmutableTest extends TestCase { private Logger log = LoggerFactory.getLogger(ImmutableTest.class); public ImmutableTest(String x) { super(x); } 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(); } public void testImmutableCollection() { Country country = new Country(); country.setName("Germany"); List states = new ArrayList<State>(); State bayern = new State(); bayern.setName("Bayern"); State hessen = new State(); hessen.setName("Hessen"); State sachsen = new State(); sachsen.setName("Sachsen"); states.add(bayern); states.add(hessen); states.add(sachsen); country.setStates(states); Session s = openSession(); Transaction tx = s.beginTransaction(); s.persist(country); tx.commit(); s.close(); s = openSession(); tx = s.beginTransaction(); Country germany = (Country) s.get(Country.class, country.getId()); assertNotNull(germany); assertEquals("Wrong number of states", 3, germany.getStates().size()); // try adding a state State foobar = new State(); foobar.setName("foobar"); s.save(foobar); germany.getStates().add(foobar); try { tx.commit(); fail(); } catch (HibernateException e) { assertTrue(e.getMessage().contains("changed an immutable collection instance")); log.debug("success"); } s.close(); s = openSession(); tx = s.beginTransaction(); germany = (Country) s.get(Country.class, country.getId()); assertNotNull(germany); assertEquals("Wrong number of states", 3, germany.getStates().size()); // try deleting a state germany.getStates().remove(0); try { tx.commit(); fail(); } catch (HibernateException e) { assertTrue(e.getMessage().contains("changed an immutable collection instance")); log.debug("success"); } s.close(); s = openSession(); tx = s.beginTransaction(); germany = (Country) s.get(Country.class, country.getId()); assertNotNull(germany); assertEquals("Wrong number of states", 3, germany.getStates().size()); tx.commit(); s.close(); } public void testMiscplacedImmutableAnnotation() { try { AnnotationConfiguration config = new AnnotationConfiguration(); config.addAnnotatedClass(Foobar.class); config.buildSessionFactory(); fail(); } catch (AnnotationException ae) { log.debug("succes"); } } /** * @see org.hibernate.test.annotations.TestCase#getMappings() */ protected Class[] getMappings() { return new Class[] { Country.class, State.class}; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -