From b9cc584086932f42b51676764dda962709567d26 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Thu, 3 Aug 2017 20:31:18 +1200 Subject: [PATCH] #1080 - NOT IN expression using entity beans / reference beans uses "in" --- .../server/expression/InExpression.java | 3 +++ .../org/tests/query/TestQueryInAssocOne.java | 22 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/expression/InExpression.java b/src/main/java/io/ebeaninternal/server/expression/InExpression.java index 1c1bac7c4..96fc7c1e8 100644 --- a/src/main/java/io/ebeaninternal/server/expression/InExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/InExpression.java @@ -92,6 +92,9 @@ class InExpression extends AbstractExpression { if (prop != null) { request.append(prop.getAssocIdInExpr(propName)); String inClause = prop.getAssocIdInValueExpr(bindValues.length); + if (not) { + request.append(" not"); + } request.append(inClause); } else { diff --git a/src/test/java/org/tests/query/TestQueryInAssocOne.java b/src/test/java/org/tests/query/TestQueryInAssocOne.java index 2d00767a3..7419b27b6 100644 --- a/src/test/java/org/tests/query/TestQueryInAssocOne.java +++ b/src/test/java/org/tests/query/TestQueryInAssocOne.java @@ -6,11 +6,12 @@ import io.ebean.Query; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; import org.tests.model.basic.ResetBasicData; -import org.junit.Assert; import org.junit.Test; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; + public class TestQueryInAssocOne extends BaseTestCase { @Test @@ -25,8 +26,23 @@ public class TestQueryInAssocOne extends BaseTestCase { query.findList(); String sql = query.getGeneratedSql(); - Assert.assertTrue(sql, sql.contains("join o_customer t1 on t1.id = t0.kcustomer_id")); - Assert.assertTrue(sql, sql.contains("t0.kcustomer_id in (?")); + assertThat(sql).contains("join o_customer t1 on t1.id = t0.kcustomer_id"); + assertThat(sql).contains("t0.kcustomer_id in (?"); + } + @Test + public void test_notIn() { + + ResetBasicData.reset(); + + List list = Ebean.find(Customer.class).where().lt("id", 200).findList(); + + Query query = Ebean.find(Order.class).where().notIn("customer", list).query(); + + query.findList(); + String sql = query.getGeneratedSql(); + + assertThat(sql).contains("join o_customer t1 on t1.id = t0.kcustomer_id"); + assertThat(sql).contains("t0.kcustomer_id not in (?"); } }