package org.tests.query.joins; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; import org.tests.model.basic.MRole; import org.tests.model.basic.MUser; import org.junit.Assert; import org.junit.Test; import java.util.List; public class TestDisjunctWhereOuterJoin extends BaseTestCase { @Test public void test() { Ebean.beginTransaction(); try { MRole r1 = new MRole(); r1.setRoleName("role1B"); Ebean.save(r1); MRole r2 = new MRole(); r2.setRoleName("role2specialB"); Ebean.save(r2); MRole r3 = new MRole(); r3.setRoleName("role3B"); Ebean.save(r3); MUser u0 = new MUser(); u0.setUserName("user0B"); u0.addRole(r1); u0.addRole(r2); Ebean.save(u0); MUser u1 = new MUser(); u1.setUserName("user1B"); u1.addRole(r1); Ebean.save(u1); Query<MUser> query = Ebean.find(MUser.class) .where().disjunction() .eq("roles.roleName", "role2specialB") // user0 .eq("roles.roleName", "role3B") // nobody .endJunction().query(); List<MUser> list = query.findList(); Assert.assertSame(1, list.size()); // list should contain user0 System.out.println(list); String sql = query.getGeneratedSql(); Assert.assertTrue(sql.contains("select distinct")); Assert.assertTrue(sql.contains("left join mrole ")); Assert.assertTrue(sql.contains(".role_name = ?")); } finally { Ebean.rollbackTransaction(); } } }