//$Id: CustomSQLTest.java 10977 2006-12-12 23:28:04Z steve.ebersole@jboss.com $ package org.hibernate.test.legacy; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.id.PostInsertIdentifierGenerator; import org.junit.Test; import org.hibernate.testing.DialectCheck; import org.hibernate.testing.RequiresDialectFeature; import org.hibernate.testing.SkipForDialect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; /** * @author MAX * */ public class CustomSQLTest extends LegacyTestCase { @Override public String[] getMappings() { return new String[] { "legacy/CustomSQL.hbm.xml" }; } public static class NonIdentityGeneratorChecker implements DialectCheck { @Override public boolean isMatch(Dialect dialect) { return !PostInsertIdentifierGenerator.class.isAssignableFrom( getDialect().getNativeIdentifierGeneratorClass() ); } } @Test @RequiresDialectFeature( NonIdentityGeneratorChecker.class ) @SkipForDialect( value = PostgreSQLDialect.class, jiraKey = "HHH-6704") @SuppressWarnings( {"UnnecessaryBoxing"}) public void testInsert() throws HibernateException, SQLException { Session s = openSession(); s.beginTransaction(); Role p = new Role(); p.setName("Patient"); s.save( p ); s.getTransaction().commit(); s.close(); sessionFactory().getCache().evictEntityRegion( Role.class ); s = openSession(); s.beginTransaction(); Role p2 = (Role) s.get(Role.class, Long.valueOf(p.getId())); assertNotSame(p, p2); assertEquals(p2.getId(),p.getId()); assertTrue(p2.getName().equalsIgnoreCase(p.getName())); s.delete(p2); s.getTransaction().commit(); s.close(); } @Test public void testJoinedSubclass() throws HibernateException, SQLException { Session s = openSession(); s.beginTransaction(); Medication m = new Medication(); m.setPrescribedDrug(new Drug()); m.getPrescribedDrug().setName( "Morphine" ); s.save( m.getPrescribedDrug() ); s.save( m ); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); Medication m2 = (Medication) s.get(Medication.class, m.getId()); assertNotSame(m, m2); s.getTransaction().commit(); s.close(); } // @Test @SuppressWarnings( {"UnnecessaryBoxing", "unchecked"}) // @RequiresDialectFeature( NonIdentityGeneratorChecker.class ) public void testCollectionCUD() throws HibernateException, SQLException { Role role = new Role(); role.setName("Jim Flanders"); Intervention iv = new Medication(); iv.setDescription("JF medical intervention"); role.getInterventions().add(iv); List sx = new ArrayList(); sx.add("somewhere"); sx.add("somehow"); sx.add("whatever"); role.setBunchOfStrings(sx); Session s = openSession(); s.beginTransaction(); s.save(role); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); Role r = (Role) s.get(Role.class, Long.valueOf(role.getId())); assertNotSame(role,r); assertEquals(1,r.getInterventions().size()); assertEquals(3, r.getBunchOfStrings().size()); r.getBunchOfStrings().set(1, "replacement"); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); r = (Role) s.get(Role.class,new Long(role.getId())); assertNotSame(role,r); assertEquals(r.getBunchOfStrings().get(1),"replacement"); assertEquals(3, r.getBunchOfStrings().size()); r.getBunchOfStrings().set(1, "replacement"); r.getBunchOfStrings().remove(1); s.flush(); r.getBunchOfStrings().clear(); s.getTransaction().commit(); s.close(); } // @Test // @RequiresDialectFeature( NonIdentityGeneratorChecker.class ) public void testCRUD() throws HibernateException, SQLException { Person p = new Person(); p.setName("Max"); p.setLastName("Andersen"); p.setNationalID("110974XYZ�"); p.setAddress("P. P. Street 8"); Session s = openSession(); s.beginTransaction(); s.save(p); s.getTransaction().commit(); s.close(); sessionFactory().getCache().evictEntityRegion( Person.class ); s = openSession(); s.beginTransaction(); Person p2 = (Person) s.get(Person.class, p.getId()); assertNotSame(p, p2); assertEquals(p2.getId(),p.getId()); assertEquals(p2.getLastName(),p.getLastName()); s.flush(); List list = s.createQuery( "select p from Party as p" ).list(); assertTrue(list.size() == 1); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); list = s.createQuery( "select p from Person as p where p.address = 'L�rkev�nget 1'" ).list(); assertTrue(list.size() == 0); p.setAddress("L�rkev�nget 1"); s.update(p); list = s.createQuery( "select p from Person as p where p.address = 'L�rkev�nget 1'" ).list(); assertTrue(list.size() == 1); list = s.createQuery( "select p from Party as p where p.address = 'P. P. Street 8'" ).list(); assertTrue(list.size() == 0); s.delete(p); list = s.createQuery( "select p from Person as p" ).list(); assertTrue(list.size() == 0); s.getTransaction().commit(); s.close(); } }