package kr.debop4j.data.ogm.test.embeddable;
import kr.debop4j.data.ogm.test.simpleentity.OgmTestBase;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import static org.fest.assertions.Assertions.assertThat;
/**
* kr.debop4j.data.ogm.test.embeddable.EmbeddableTest
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 13. 4. 1
*/
public class EmbeddableTest extends OgmTestBase {
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { Account.class };
}
@Test
public void embeddableEntity() throws Exception {
final Session session = openSession();
Transaction transaction = session.beginTransaction();
Account account = new Account();
account.setLogin("emmanuel");
account.setPassword("li");
account.setPassword("like I would tell ya");
account.setHomeAddress(new Address());
final Address address = account.getHomeAddress();
address.setCity("Paris");
address.setCountry("France");
address.setStreet1("1 avenue des Champs Elysees");
address.setZipCode("75007");
session.persist(account);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
final Account loadedAccount = (Account) session.get(Account.class, account.getLogin());
assertThat(loadedAccount).as("Cannot load persisted object").isNotNull();
final Address loadedAddress = loadedAccount.getHomeAddress();
assertThat(loadedAddress).as("Embeddable should not be null").isNotNull();
assertThat(loadedAddress.getCity()).as("persist and load fails for embeddable").isEqualTo(address.getCity());
assertThat(loadedAddress.getZipCode()).as("@Column support for embeddable does not work").isEqualTo(address.getZipCode());
transaction.commit();
session.clear();
transaction = session.beginTransaction();
loadedAddress.setCountry("USA");
session.merge(loadedAccount);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
Account secondLoadedAccount = (Account) session.get(Account.class, account.getLogin());
assertThat(loadedAccount.getHomeAddress().getCity())
.as("Merge fails for embeddable")
.isEqualTo(secondLoadedAccount.getHomeAddress().getCity());
session.delete(secondLoadedAccount);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
assertThat(session.get(Account.class, account.getLogin())).isNull();
transaction.commit();
session.close();
}
}