Search in sources :

Example 1 with User

use of org.datanucleus.samples.annotations.inherited.User in project tests by datanucleus.

the class JPQLQueryTest method testTYPE.

public void testTYPE() {
    try {
        EntityManager em = getEM();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();
            Person p = new Person(101, "Fred", "Flintstone", "fred.flintstone@jpox.com");
            em.persist(p);
            Employee e = new Employee(102, "Barney", "Rubble", "barney.rubble@jpox.com", 10000.0f, "12345");
            em.persist(e);
            em.flush();
            List<Person> result = em.createQuery("SELECT p FROM " + Person.class.getName() + " p WHERE TYPE(p) <> Employee_Ann").getResultList();
            assertEquals(1, result.size());
            Person p1 = result.get(0);
            assertTrue(p1 instanceof Person && !(p1 instanceof Employee));
            List result2 = em.createQuery("SELECT p FROM " + Person.class.getName() + " p WHERE TYPE(p) IN (Employee_Ann, Person_Ann)").getResultList();
            assertEquals(2, result2.size());
            List<Person> result3 = em.createQuery("SELECT p FROM " + Person.class.getName() + " p WHERE TYPE(p) IN (Employee_Ann)").getResultList();
            assertEquals(1, result3.size());
            Person p3 = result3.get(0);
            assertTrue(p3 instanceof Employee);
            List<Person> result4 = em.createQuery("SELECT p FROM " + Person.class.getName() + " p WHERE TYPE(p) NOT IN (Employee_Ann)").getResultList();
            assertEquals(1, result4.size());
            Person p4 = result4.get(0);
            assertTrue(p4 instanceof Person && !(p4 instanceof Employee));
            Collection<String> collParam = new ArrayList<>();
            collParam.add("Employee_Ann");
            collParam.add("Person_Ann");
            TypedQuery<Person> q5 = (TypedQuery<Person>) em.createQuery("SELECT p FROM " + Person.class.getName() + " p WHERE TYPE(p) IN :collParam");
            q5.setParameter("collParam", collParam);
            List<Person> result5 = q5.getResultList();
            assertEquals(2, result5.size());
            Collection<Class> collParam2 = new ArrayList<>();
            collParam2.add(Employee.class);
            collParam2.add(Person.class);
            TypedQuery<Person> q6 = (TypedQuery<Person>) em.createQuery("SELECT p FROM " + Person.class.getName() + " p WHERE TYPE(p) IN :collParam");
            q6.setParameter("collParam", collParam2);
            List<Person> result6 = q6.getResultList();
            assertEquals(2, result6.size());
            // Test for TYPE using a discriminator sample
            User u = new User(1, "Basic User");
            em.persist(u);
            SuperUser su = new SuperUser(2, "Root", "Admin");
            em.persist(su);
            em.flush();
            List<Object[]> result7 = em.createQuery("SELECT u.name, TYPE(u) FROM " + User.class.getName() + " u ORDER BY u.id").getResultList();
            assertEquals(2, result7.size());
            Object[] result7_0 = result7.get(0);
            Object[] result7_1 = result7.get(1);
            assertEquals(2, result7_0.length);
            assertEquals("Basic User", result7_0[0]);
            assertEquals("User", result7_0[1]);
            assertEquals("Root", result7_1[0]);
            assertEquals("SuperUser", result7_1[1]);
            tx.rollback();
        } catch (Exception e) {
            LOG.error("Exception in query", e);
            fail("Exception in TYPE handling : " + e.getMessage());
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    } finally {
        clean(Employee.class);
        clean(Person.class);
    }
}
Also used : EntityTransaction(javax.persistence.EntityTransaction) User(org.datanucleus.samples.annotations.inherited.User) SuperUser(org.datanucleus.samples.annotations.inherited.SuperUser) TypedQuery(javax.persistence.TypedQuery) ArrayList(java.util.ArrayList) NoResultException(javax.persistence.NoResultException) NonUniqueResultException(javax.persistence.NonUniqueResultException) PersistenceException(javax.persistence.PersistenceException) EntityManager(javax.persistence.EntityManager) Employee(org.datanucleus.samples.annotations.models.company.Employee) List(java.util.List) ArrayList(java.util.ArrayList) Person(org.datanucleus.samples.annotations.models.company.Person) SuperUser(org.datanucleus.samples.annotations.inherited.SuperUser)

Aggregations

ArrayList (java.util.ArrayList)1 List (java.util.List)1 EntityManager (javax.persistence.EntityManager)1 EntityTransaction (javax.persistence.EntityTransaction)1 NoResultException (javax.persistence.NoResultException)1 NonUniqueResultException (javax.persistence.NonUniqueResultException)1 PersistenceException (javax.persistence.PersistenceException)1 TypedQuery (javax.persistence.TypedQuery)1 SuperUser (org.datanucleus.samples.annotations.inherited.SuperUser)1 User (org.datanucleus.samples.annotations.inherited.User)1 Employee (org.datanucleus.samples.annotations.models.company.Employee)1 Person (org.datanucleus.samples.annotations.models.company.Person)1