/* | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the | |
* "License"); you may not use this file except in compliance | |
* with the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, | |
* software distributed under the License is distributed on an | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
* KIND, either express or implied. See the License for the | |
* specific language governing permissions and limitations | |
* under the License. | |
*/ | |
package org.apache.openjpa.persistence.jpql.joins; | |
import java.util.ArrayList; | |
import java.util.List; | |
import javax.persistence.EntityManager; | |
import org.apache.openjpa.persistence.common.apps.ArtCourse; | |
import org.apache.openjpa.persistence.common.apps.Course; | |
import org.apache.openjpa.persistence.common.apps.Department; | |
import org.apache.openjpa.persistence.common.apps.Student; | |
import org.apache.openjpa.persistence.common.utils.AbstractTestCase; | |
public class TestEJBJoins extends AbstractTestCase { | |
public TestEJBJoins(String name) { | |
super(name, "jpqlclausescactusapp"); | |
} | |
public void setUp() { | |
deleteAll(Course.class); | |
deleteAll(Student.class); | |
deleteAll(Department.class); | |
EntityManager em = currentEntityManager(); | |
startTx(em); | |
String name = ""; | |
List<Course> clist = new ArrayList<Course>(); | |
List<Department> dlist = new ArrayList<Department>(); | |
for (int i = 0; i < 5; i++) { | |
Course curr = new Course("Math " + i, i * 2, i); | |
Course acurr = new ArtCourse(i + 20, "English" + (2 * i)); | |
Department durr = new Department("CompSci" + i, null, i + 2); | |
clist.add(curr); | |
clist.add(acurr); | |
dlist.add(durr); | |
} | |
Student stud = new Student("Jonathan", clist, dlist); | |
Student stud2 = new Student("Stam", null, dlist); | |
Student stud3 = new Student("John", clist, null); | |
Student stud4 = new Student("Bill", null, null); | |
em.persist(stud); | |
em.persist(stud2); | |
em.persist(stud3); | |
em.persist(stud4); | |
endTx(em); | |
endEm(em); | |
} | |
public void testInnerJoin() { | |
EntityManager em = currentEntityManager(); | |
String query = "SELECT distinct o.name from Student o JOIN " + | |
"o.course d WHERE d.name" + | |
"='Math 4'"; | |
List ls = (List) em.createQuery(query) | |
.getResultList(); | |
assertNotNull(ls); | |
if (ls != null) { | |
assertEquals(2, ls.size()); | |
} | |
endEm(em); | |
} | |
public void testOuterJoin() { | |
EntityManager em = currentEntityManager(); | |
String query = "SELECT distinct s.name FROM Student " + | |
"s LEFT JOIN s.department d"; | |
List ls = (List) em.createQuery(query) | |
.getResultList(); | |
assertNotNull(ls); | |
assertEquals(4, ls.size()); | |
endEm(em); | |
} | |
public void testFetchJoin1() { | |
EntityManager em = currentEntityManager(); | |
String query = "SELECT s FROM Student s JOIN FETCH s.name"; | |
List ls = em.createQuery(query).getResultList(); | |
assertNotNull(ls); | |
assertEquals(4, ls.size()); | |
endEm(em); | |
} | |
public void testFetchJoin2() { | |
EntityManager em = currentEntityManager(); | |
String query = "SELECT s " + | |
"FROM Student s " + | |
"JOIN FETCH s.name d"; | |
try { | |
List ls = em.createQuery(query).getResultList(); | |
fail( | |
"Not permitted to specify an id variable for entities ref. by the right side of fetch join"); | |
} | |
catch (Exception e) { | |
//suppose to throw an exception..should not pass | |
} | |
endEm(em); | |
} | |
public void testLeftOuterJoin() { | |
EntityManager em = currentEntityManager(); | |
String ljoin = | |
"SELECT DISTINCT s.name FROM Student s LEFT OUTER JOIN s.department d " + | |
"WHERE d.name = 'CompSci2'"; | |
List ls = em.createQuery(ljoin).getResultList(); | |
assertNotNull(ls); | |
assertEquals(2, ls.size()); | |
assertTrue(ls.contains("Jonathan")); | |
assertTrue(ls.contains("Stam")); | |
endEm(em); | |
} | |
public void testInnerJoinFetch() { | |
EntityManager em = currentEntityManager(); | |
String query = "SELECT s FROM Student " + | |
"s JOIN FETCH s.department"; | |
List ls = (List) em.createQuery(query) | |
.getResultList(); | |
assertNotNull(ls); | |
assertEquals(2, ls.size()); | |
em.close(); | |
} | |
public void testLeftJoinFetch() { | |
EntityManager em = currentEntityManager(); | |
String query = "SELECT s FROM Student " + | |
"s LEFT JOIN FETCH s.department"; | |
List ls = (List) em.createQuery(query) | |
.getResultList(); | |
assertNotNull(ls); | |
assertEquals(4, ls.size()); | |
em.close(); | |
} | |
} |