/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.virtuoso.query;
import static com.mysema.query.alias.Alias.$;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.mysema.query.alias.Alias;
import com.mysema.rdfbean.domains.CompanyDepartmentEmployeeDomain;
import com.mysema.rdfbean.domains.CompanyDepartmentEmployeeDomain.Company;
import com.mysema.rdfbean.domains.CompanyDepartmentEmployeeDomain.Department;
import com.mysema.rdfbean.domains.CompanyDepartmentEmployeeDomain.Employee;
import com.mysema.rdfbean.testutil.SessionConfig;
import com.mysema.rdfbean.virtuoso.AbstractConnectionTest;
@SessionConfig({ Company.class, Department.class, Employee.class })
public class InverseMappingTest extends AbstractConnectionTest implements CompanyDepartmentEmployeeDomain {
@Test
public void test() {
Company company = new Company();
Department department = new Department();
Employee employee = new Employee();
employee.department = department;
department.company = company;
session.save(company);
session.save(department);
session.save(employee);
session.flush();
session.clear();
Company c = Alias.alias(Company.class);
Department d = Alias.alias(Department.class);
Employee e = Alias.alias(Employee.class);
// count instances
assertEquals(1l, session.from($(c)).count());
assertEquals(1l, session.from($(d)).count());
assertEquals(1l, session.from($(e)).count());
// direct
assertEquals(1l, session.from($(d)).where($(d.getCompany()).eq(company)).count());
assertEquals(1l, session.from($(d)).where($(d.getCompany()).eq(company)).count());
assertEquals(1l, session.from($(e)).where($(e.getDepartment()).eq(department)).count());
// inverse
assertEquals(1l, session.from($(c)).where($(c.getDepartment()).eq(department)).count());
assertEquals(1l, session.from($(c)).where($(c.getDepartments()).contains(department)).count());
assertEquals(1l, session.from($(d)).where($(d.getEmployees()).contains(employee)).count());
}
}