Package com.avaje.tests.query

Source Code of com.avaje.tests.query.TestManyWhereJoinM2M

package com.avaje.tests.query;

import java.util.List;

import org.junit.Assert;
import org.junit.Test;

import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.Query;
import com.avaje.tests.model.basic.MRole;
import com.avaje.tests.model.basic.MUser;

public class TestManyWhereJoinM2M extends BaseTestCase {

  @Test
  public void test() {

    Ebean.beginTransaction();

    MRole r1 = new MRole();
    r1.setRoleName("role1");
    Ebean.save(r1);

    MRole r2 = new MRole();
    r2.setRoleName("role2special");
    Ebean.save(r2);

    MRole r3 = new MRole();
    r3.setRoleName("role3");
    Ebean.save(r3);

    MUser u0 = new MUser();
    u0.setUserName("user0");
    u0.addRole(r1);
    u0.addRole(r2);

    Ebean.save(u0);

    MUser u1 = new MUser();
    u1.setUserName("user1");
    u1.addRole(r1);

    Ebean.save(u1);

    Ebean.commitTransaction();

    Query<MUser> query = Ebean.find(MUser.class).fetch("roles")
    // the where on a 'many' (like orders) requires an
    // additional join and distinct which is independent
    // of a fetch join (if there is a fetch join)
        .where().eq("roles.roleName", "role2special").query();

    List<MUser> list = query.findList();
    System.out.println(list);

    String sql = query.getGeneratedSql();
    Assert.assertTrue(sql.indexOf("select distinct") > -1);
    Assert.assertTrue(sql.indexOf("left outer join mrole ") > -1);
    Assert.assertTrue(sql.indexOf("join mrole ") > -1);
    Assert.assertTrue(sql.indexOf(".role_name = ?") > -1);

  }
}
TOP

Related Classes of com.avaje.tests.query.TestManyWhereJoinM2M

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.