package kr.debop4j.data.hibernate.annotated.collection;
import kr.debop4j.data.hibernate.HibernateTestBase;
import kr.debop4j.data.hibernate.unitofwork.UnitOfWorks;
import kr.debop4j.data.mapping.model.annotated.collection.Car;
import kr.debop4j.data.mapping.model.annotated.collection.CarOption;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* org.annotated.mapping.domain.model.collection.CarTest
*
* @author 배성혁 ( sunghyouk.bae@gmail.com )
* @since 12. 12. 15.
*/
public class CarTest extends HibernateTestBase {
private Session session;
@Before
public void before() {
session = UnitOfWorks.getCurrentSession();
}
@After
public void after() { }
@Test
public void mapAssociation() throws Exception {
Car merc = new Car();
merc.getOptions().put("AIRCO", "DUAL-AUTO");
merc.getOptions().put("GEARBOX", "AUTO");
merc.getOptions().put("CUPHOLDER", "YES");
session.save(merc);
session.flush();
session.evict(merc);
Car loaded = (Car) session.get(Car.class, merc.getId());
Assert.assertEquals(3, loaded.getOptions().size());
}
@Test
public void mapAssociationWithNull() throws Exception {
Car bmw = new Car();
bmw.getOptions().put("AIRCO", "DUAL-AUTO");
bmw.getOptions().put("GEARBOX", "AUTO");
bmw.getOptions().put("CUPHOLDER", null);
session.save(bmw);
session.flush();
session.evict(bmw);
Car loaded = (Car) session.get(Car.class, bmw.getId());
// NULL 값을 가진 OPTION 은 저장되지 않는다. 그러므로 OPTION 은 2개입니다.
Assert.assertEquals(2, loaded.getOptions().size());
}
@Test
public void mapAssociationWithClass() throws Exception {
Car bmw = new Car();
bmw.getCarOptions().put("AIRCO", new CarOption("AIRCO-2", 100));
bmw.getCarOptions().put("GEARBOX", new CarOption("GEARBOX-2", 200));
session.save(bmw);
session.flush();
session.evict(bmw);
Car loaded = (Car) session.get(Car.class, bmw.getId());
Assert.assertEquals(2, loaded.getCarOptions().size());
}
}