package kr.debop4j.data.ogm.test.associations.onetoone;
import kr.debop4j.data.ogm.test.simpleentity.OgmTestBase;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
/**
* kr.debop4j.data.ogm.test.associations.onetoone.OneToOneTest
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 13. 4. 1
*/
@Slf4j
public class OneToOneTest extends OgmTestBase {
@Test
public void unidirectionalManyToOne() throws Exception {
final Session session = openSession();
Transaction transaction = session.beginTransaction();
Horse horse = new Horse();
horse.setName("Palefrenier");
Cavalier cavalier = new Cavalier();
cavalier.setName("Caroline");
cavalier.setHorse(horse);
session.persist(horse);
session.persist(cavalier);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
cavalier = (Cavalier) session.get(Cavalier.class, cavalier.getId());
horse = cavalier.getHorse();
session.delete(cavalier);
session.delete(horse);
transaction.commit();
session.close();
checkCleanCache();
}
@Test
public void unidirectionalOneToOne() throws Exception {
final Session session = openSession();
Transaction transaction = session.beginTransaction();
Vehicle vehicule = new Vehicle();
vehicule.setBrand("Mercedes");
Wheel wheel = new Wheel();
wheel.setVehicle(vehicule);
session.persist(vehicule);
session.persist(wheel);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
if (log.isInfoEnabled())
log.info("Weel id=[{}]", wheel.getId());
wheel = (Wheel) session.get(Wheel.class, wheel.getId());
vehicule = wheel.getVehicle();
session.delete(wheel);
session.delete(vehicule);
transaction.commit();
session.close();
}
@Test
public void bidirectionalManyToOne() throws Exception {
final Session session = openSession();
Transaction transaction = session.beginTransaction();
Husband husband = new Husband();
husband.setName("Alex");
Wife wife = new Wife();
wife.setName("Bea");
husband.setWife(wife);
wife.setHusband(husband);
session.persist(husband);
session.persist(wife);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
husband = (Husband) session.get(Husband.class, husband.getId());
assertNotNull(husband);
assertNotNull(husband.getWife());
session.clear();
wife = (Wife) session.get(Wife.class, wife.getId());
assertNotNull(wife);
husband = wife.getHusband();
assertNotNull(husband);
Wife bea2 = new Wife();
session.persist(bea2);
bea2.setName("Still Bea");
husband.setWife(bea2);
wife.setHusband(null);
bea2.setHusband(husband);
transaction.commit();
session.clear();
transaction = session.beginTransaction();
husband = (Husband) session.get(Husband.class, husband.getId());
assertNotNull(husband);
assertNotNull(husband.getWife());
session.clear();
wife = (Wife) session.get(Wife.class, wife.getId());
assertNotNull(wife);
assertNull(wife.getHusband());
session.delete(wife);
bea2 = (Wife) session.get(Wife.class, bea2.getId());
assertNotNull(bea2);
husband = bea2.getHusband();
assertNotNull(husband);
bea2.setHusband(null);
husband.setWife(null);
session.delete(husband);
session.delete(wife);
transaction.commit();
session.close();
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Horse.class,
Cavalier.class,
Vehicle.class,
Wheel.class,
Husband.class,
Wife.class
};
}
}