package org.hibernate.examples.mapping.simple; import org.hibernate.Session; import org.hibernate.examples.AbstractHibernateTest; import org.hibernate.examples.utils.Serializers; import org.junit.Test; import org.springframework.transaction.annotation.Transactional; import static org.assertj.core.api.Assertions.assertThat; /** * org.hibernate.examples.mapping.simple.SimpleEntityTest * * @author 배성혁 sunghyouk.bae@gmail.com * @since 2013. 11. 28. 오후 4:18 */ @Transactional public class SimpleEntityTest extends AbstractHibernateTest { public Session getSession() { return sessionFactory.getCurrentSession(); } @Test public void lifecycle() throws Exception { LifecycleEntity entity = new LifecycleEntity(); getSession().save(entity); getSession().flush(); LifecycleEntity loaded = (LifecycleEntity) getSession().load(LifecycleEntity.class, entity.getId()); assertThat(loaded).isNotNull(); assertThat(loaded).isEqualTo(entity); } @Test public void transientObject() throws Exception { SimpleEntity transientObj = new SimpleEntity(); transientObj.setName("transient"); SimpleEntity transientObj2 = Serializers.copyObject(transientObj); transientObj2.setDescription("desc"); assertThat(transientObj2).isEqualTo(transientObj); SimpleEntity savedObj = Serializers.copyObject(transientObj); getSession().save(savedObj); getSession().flush(); getSession().clear(); // Id를 발급받은 Persistent Object 와 Transient Object 와의 비교. hashCode에서 assertThat(savedObj).isNotEqualTo(transientObj); SimpleEntity loaded = (SimpleEntity) getSession().get(SimpleEntity.class, savedObj.getId()); assertThat(loaded).isNotNull(); // Persistent Object 간의 비교 assertThat(loaded).isEqualTo(savedObj); // Persistent Object 와 Transient Object 간의 비교 assertThat(loaded).isNotEqualTo(transientObj); SimpleEntity savedObj2 = Serializers.copyObject(transientObj); getSession().save(savedObj2); getSession().flush(); getSession().clear(); SimpleEntity loaded2 = (SimpleEntity) getSession().get(SimpleEntity.class, savedObj2.getId()); assertThat(loaded2).isNotNull(); assertThat(loaded2).isEqualTo(savedObj2); assertThat(loaded2).isNotEqualTo(transientObj); assertThat(loaded2).isNotEqualTo(loaded); } }