package org.hibernate.test.annotations.filter.subclass.joined;
import junit.framework.Assert;
import org.hibernate.test.annotations.filter.subclass.SubClassTest;
import org.junit.Test;
public class JoinedSubClassTest extends SubClassTest{
@Override
protected Class[] getAnnotatedClasses() {
return new Class[]{Animal.class, Mammal.class, Human.class, Club.class};
}
@Override
protected void cleanupTest() throws Exception {
super.cleanupTest();
openSession();
session.beginTransaction();
session.createQuery("delete from Club").executeUpdate();
session.getTransaction().commit();
session.close();
}
@Override
protected void persistTestData() {
Club club = new Club();
club.setName("Mensa applicants");
club.getMembers().add(createHuman(club, false, 90));
club.getMembers().add(createHuman(club, false, 100));
club.getMembers().add(createHuman(club, true, 110));
session.persist(club);
}
@Test
public void testClub(){
openSession();
session.beginTransaction();
Club club = (Club) session.createQuery("from Club").uniqueResult();
Assert.assertEquals(3, club.getMembers().size());
session.clear();
session.enableFilter("pregnantMembers");
club = (Club) session.createQuery("from Club").uniqueResult();
Assert.assertEquals(1, club.getMembers().size());
session.clear();
session.enableFilter("iqMin").setParameter("min", 148);
club = (Club) session.createQuery("from Club").uniqueResult();
Assert.assertEquals(0, club.getMembers().size());
session.getTransaction().commit();
session.close();
}
private Human createHuman(Club club, boolean pregnant, int iq){
Human human = new Human();
human.setClub(club);
human.setName("Homo Sapiens");
human.setPregnant(pregnant);
human.setIq(iq);
session.persist(human);
return human;
}
}