/*
* Copyright (c) 2010 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.query;
import static com.mysema.query.alias.Alias.$;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.joda.time.DateTime;
import org.junit.Ignore;
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.domains.SongPlaybackMusicStore.MusicStore;
import com.mysema.rdfbean.domains.SongPlaybackMusicStore.Song;
import com.mysema.rdfbean.domains.SongPlaybackMusicStore.SongPlayback;
import com.mysema.rdfbean.model.ID;
import com.mysema.rdfbean.model.MiniConnection;
import com.mysema.rdfbean.model.UID;
import com.mysema.rdfbean.testutil.SessionConfig;
@SessionConfig({ Company.class, Department.class, Employee.class})
public class InverseMappingTest extends SessionTestBase 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());
}
@Test
@Ignore // inverse properties are not stored
public void testInverseIDMapping() {
Song song = new Song();
MusicStore musicStore = new MusicStore();
SongPlayback songPlayback = new SongPlayback();
ID songLID = session.save(song);
ID musicStoreLID = session.save(musicStore);
session.flush();
song = session.get(Song.class, songLID);
musicStore = session.get(MusicStore.class, musicStoreLID);
session.clear();
songPlayback.datetime = new DateTime();
songPlayback.song = song.id;
songPlayback.store = musicStore.id;
session.save(songPlayback);
session.flush();
session.clear();
MiniConnection conn = repository.openConnection();
assertTrue(conn.exists(null, new UID("http://www.foo.com#musicStore"), null, null, true));
assertTrue(conn.exists(null, new UID("http://www.foo.com#playback"), null, null, true));
conn.close();
}
}