package edu.ualberta.med.biobank.test.action.tmp; import java.math.BigInteger; import java.util.Arrays; import java.util.List; import java.util.Random; import org.hibernate.FlushMode; import org.hibernate.PropertyValueException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.event.PreUpdateEvent; import org.hibernate.event.PreUpdateEventListener; import org.hibernate.exception.ConstraintViolationException; import edu.ualberta.med.biobank.model.ActivityStatus; import edu.ualberta.med.biobank.model.Address; import edu.ualberta.med.biobank.model.Site; public class TestStuff { private final SessionFactory sessionFactory; private final Session session; private TestStuff() { Configuration configuration = new Configuration().configure(); System.out.println(Arrays.toString(configuration.getEventListeners() .getPreUpdateEventListeners())); configuration.getEventListeners().setPreUpdateEventListeners( new PreUpdateEventListener[] { new Handler() }); // configuration.setProperty("hibernate.show_sql", "true"); // configuration.setProperty("hibernate.format_sql", "true"); // configuration.setProperty("hibernate.use_sql_comments", "true"); // configuration.setProperty("javax.persistence.validation.mode", // "none"); configuration.setProperty("hibernate.check_nullability", "false"); sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); session.setFlushMode(FlushMode.COMMIT); } public void run() { Site s1 = null; List<?> results = session .createQuery( "select o from " + Site.class.getName() + " o where name = 'a'").list(); if (!results.isEmpty()) { s1 = (Site) results.get(0); } else { s1 = new Site(); s1.setAddress(new Address()); s1.setName("a"); s1.setNameShort("b"); } ActivityStatus active = ActivityStatus.ACTIVE; Address address = s1.getAddress(); address.setCity(new BigInteger(10, new Random()).toString(32)); // s1.setAddress(null); s1.setActivityStatus(active); s1.setNameShort(new BigInteger(130, new Random()).toString(32)); System.out.println("start"); session.beginTransaction(); try { session.saveOrUpdate(s1); session.getTransaction().commit(); session.flush(); } catch (PropertyValueException caught) { System.out.println(caught.getEntityName()); System.out.println(caught.getPropertyName()); caught.printStackTrace(); } catch (ConstraintViolationException caught) { System.out.println(caught.getConstraintName()); System.out.println(caught.getErrorCode()); caught.printStackTrace(); } System.out.println("finish"); } public static void main(String[] args) { new TestStuff().run(); } public static class Handler implements PreUpdateEventListener { private static final long serialVersionUID = 1L; @Override public boolean onPreUpdate(PreUpdateEvent event) { // Session session = event.getSession(); // int[] dirty = // event.getPersister().findDirty(event.getState(), // event.getOldState(), event.getEntity(), session); // int[] modified = // event.getPersister().findModified(event.getState(), // event.getOldState(), event.getEntity(), event.getSource()); System.out.println("propertyNames:"); String[] propertyNames = event.getPersister().getPropertyNames(); for (int i = 0, n = propertyNames.length; i < n; i++) { System.out.println(i + ": " + propertyNames[i]); } // if (event.getEntity() instanceof Site) { // Site site = (Site) event.getEntity(); // EntityPersister addressEntityPersister = // event.getSource().getEntityPersister( // Address.class.getName(), site.getAddress()); // // Object[] propertyValues = // // addressEntityPersister.getPropertyValues(site.getAddress(), // // EntityMode.POJO); // // Object[] databaseSnapshot = // addressEntityPersister.getDatabaseSnapshot(site // .getAddress().getId(), event.getSource()); // // Map<?, ?> map = new HashMap<Object, Object>(); // // Object[] propertyValuesToInsert = // addressEntityPersister.getPropertyValuesToInsert( // site.getAddress(), map, // event.getSource()); // // // System.out.println("propertyValues: " // // + Arrays.toString(propertyValues)); // System.out.println("databaseSnapshot: " // + Arrays.toString(databaseSnapshot)); // System.out.println("propertyValuesToInsert: " // + Arrays.toString(propertyValuesToInsert)); // // for (Entry<?, ?> entry : map.entrySet()) { // System.out.println("entry: " + entry.getKey() + " -> " // + entry.getValue()); // } // } // System.out.println("dirty: " + Arrays.toString(dirty)); // System.out.println("modified: " + Arrays.toString(modified)); System.out.println("state: " + Arrays.toString(event.getState())); System.out.println("oldState: " + Arrays.toString(event.getOldState())); return false; } } }