/*
* Copyright 2004-2015 the Seasar Foundation and the Others.
*
* Licensed 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.seasar.extension.jdbc.it.auto.select;
import java.math.BigDecimal;
import java.util.List;
import org.junit.runner.RunWith;
import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.extension.jdbc.exception.PropertyNotFoundRuntimeException;
import org.seasar.extension.jdbc.it.condition.DepartmentCondition;
import org.seasar.extension.jdbc.it.condition.EmployeeCondition;
import org.seasar.extension.jdbc.it.entity.Department;
import org.seasar.extension.jdbc.it.entity.Employee;
import org.seasar.extension.jdbc.where.SimpleWhere;
import org.seasar.framework.unit.Seasar2;
import static org.junit.Assert.*;
import static org.seasar.extension.jdbc.it.name.EmployeeNames.*;
import static org.seasar.extension.jdbc.operation.Operations.*;
/**
* @author taedium
*
*/
@RunWith(Seasar2.class)
public class SingleKeyJoinTest {
private JdbcManager jdbcManager;
/**
*
* @throws Exception
*/
public void testJoin_nest() throws Exception {
List<Department> list =
jdbcManager
.from(Department.class)
.leftOuterJoin("employees")
.leftOuterJoin("employees.address")
.orderBy("departmentId")
.getResultList();
assertEquals(4, list.size());
assertNotNull(list.get(0).employees);
assertNotNull(list.get(0).employees.get(0).address);
}
/**
*
* @throws Exception
*/
public void testJoin_nest_simpleWhere() throws Exception {
List<Department> list =
jdbcManager
.from(Department.class)
.leftOuterJoin("employees")
.leftOuterJoin("employees.address")
.where(new SimpleWhere().eq("employees.addressId", 3))
.getResultList();
assertEquals(1, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_nest_condition() throws Exception {
List<Department> list =
jdbcManager
.from(Department.class)
.leftOuterJoin("employees")
.leftOuterJoin("employees.address")
.where(new DepartmentCondition().employees().addressId.eq(3))
.getResultList();
assertEquals(1, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_star() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin("manager")
.leftOuterJoin("department")
.leftOuterJoin("address")
.getResultList();
assertEquals(13, list.size());
assertNotNull(list.get(0).department);
assertNotNull(list.get(0).manager);
assertNotNull(list.get(0).address);
}
/**
*
* @throws Exception
*/
public void testJoin_star_simpleWhere() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin("manager")
.leftOuterJoin("department")
.leftOuterJoin("address")
.where(
new SimpleWhere().eq(
"department.departmentName",
"RESEARCH").starts("address.street", "STREET").ge(
"salary",
2000))
.getResultList();
assertEquals(3, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_star_condition() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin("manager")
.leftOuterJoin("department")
.leftOuterJoin("address")
.where(
new EmployeeCondition().salary
.ge(new BigDecimal("2000"))
.department().departmentName.eq("RESEARCH").and(
new EmployeeCondition().address().street
.starts("STREET")))
.getResultList();
assertEquals(3, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_star_names() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin(manager())
.leftOuterJoin(department())
.leftOuterJoin(address())
.where(
ge(salary(), new BigDecimal("2000")),
eq(department().departmentName(), "RESEARCH"),
starts(address().street(), "STREET"))
.getResultList();
assertEquals(3, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_illegalPropertyName() throws Exception {
try {
jdbcManager
.from(Department.class)
.leftOuterJoin("illegal")
.getResultList();
fail();
} catch (PropertyNotFoundRuntimeException e) {
System.out.println(e.getMessage());
}
}
/**
*
* @throws Exception
*/
public void testJoin_illegalPropertyName2() throws Exception {
try {
jdbcManager
.from(Department.class)
.leftOuterJoin("employees")
.leftOuterJoin("employees.illegal")
.getResultList();
fail();
} catch (PropertyNotFoundRuntimeException e) {
System.out.println(e.getMessage());
}
}
/**
*
* @throws Exception
*/
public void testJoin_condition() throws Exception {
List<Employee> list =
jdbcManager.from(Employee.class).innerJoin(
"department",
"managerId = ?",
9).where("salary > ?", new BigDecimal(2000)).getResultList();
assertEquals(3, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_names() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin(department(), eq(managerId(), 9))
.where(gt(salary(), new BigDecimal(2000)))
.getResultList();
assertEquals(3, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_condition_where() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin("department", new SimpleWhere().eq("managerId", 9))
.where(new SimpleWhere().gt("salary", new BigDecimal(2000)))
.getResultList();
assertEquals(3, list.size());
}
/**
*
* @throws Exception
*/
public void testJoin_condition_where_names() throws Exception {
List<Employee> list =
jdbcManager
.from(Employee.class)
.innerJoin(department(), eq(managerId(), 9))
.where(gt(salary(), new BigDecimal(2000)))
.getResultList();
assertEquals(3, list.size());
}
}