diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index cf26b5333..227264214 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -59,6 +59,13 @@
test
+
+ io.ebean
+ ebean-ddl-generator
+ 13.15.3-SNAPSHOT
+ test
+
+
io.avaje
junit
diff --git a/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java b/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java
index 45b390c18..014302e2c 100644
--- a/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java
+++ b/ebean-autotune/src/test/java/org/tests/autofetch/MainAutoQueryTune1.java
@@ -1,28 +1,37 @@
package org.tests.autofetch;
+import io.ebean.DB;
+import org.junit.jupiter.api.Test;
+import org.tests.model.basic.Order;
+
+import java.util.List;
+
public class MainAutoQueryTune1 {
-// public static void main(String[] args) {
-//
-// ResetBasicData.reset();
-//
-// MainAutoQueryTune1 me = new MainAutoQueryTune1();
-// me.tuneJoin();
-// }
-//
-// private void tuneJoin() {
-// List list = Ebean.find(Order.class)
-// .setAutoTune(true)
-// .fetch("customer")
-// .where()
-// .eq("status", Order.Status.NEW)
-// .eq("customer.name", "Rob")
-// .order().asc("id")
-// .findList();
-//
-// for (Order order : list) {
-// order.getId();
-// order.getOrderDate();
-// }
-// }
+ public static void main(String[] args) {
+ MainAutoQueryTune1 me = new MainAutoQueryTune1();
+ me.tuneJoin();
+ }
+
+ @Test
+ void tuneJoin() {
+ TestData.load();
+
+ List list = DB.find(Order.class)
+ .setAutoTune(true)
+ //.fetch("customer")
+ .where()
+ .eq("status", Order.Status.NEW)
+ .eq("customer.name", "Rob")
+ .order().asc("id")
+ .findList();
+
+ for (Order order : list) {
+ order.getId();
+ order.getOrderDate();
+ order.getCustomer().getName();
+ order.getCustomer().getNote();
+ }
+ }
+
}
diff --git a/ebean-autotune/src/test/java/org/tests/autofetch/TestData.java b/ebean-autotune/src/test/java/org/tests/autofetch/TestData.java
new file mode 100644
index 000000000..33621262f
--- /dev/null
+++ b/ebean-autotune/src/test/java/org/tests/autofetch/TestData.java
@@ -0,0 +1,25 @@
+package org.tests.autofetch;
+
+import io.ebean.DB;
+import org.tests.model.basic.Address;
+import org.tests.model.basic.Customer;
+import org.tests.model.basic.Order;
+
+import java.time.LocalDate;
+
+public class TestData {
+
+ static void load() {
+ if (DB.find(Order.class).findCount() > 0) {
+ return;
+ }
+
+ var customer = new Customer("Rob");
+ customer.setBillingAddress(new Address("l0", "city0"));
+ DB.save(customer);
+
+ var order = new Order(customer);
+ order.setOrderDate(LocalDate.now());
+ DB.save(order);
+ }
+}
diff --git a/ebean-autotune/src/test/java/org/tests/model/basic/Address.java b/ebean-autotune/src/test/java/org/tests/model/basic/Address.java
index dd75e4a00..5c289c3ad 100644
--- a/ebean-autotune/src/test/java/org/tests/model/basic/Address.java
+++ b/ebean-autotune/src/test/java/org/tests/model/basic/Address.java
@@ -1,17 +1,21 @@
package org.tests.model.basic;
import javax.persistence.Entity;
-import javax.persistence.Id;
import javax.persistence.Table;
@Entity
-@Table(name = "address")
+@Table(name = "o_address")
public class Address extends BaseModel {
String line1;
String line2;
String city;
+ public Address(String line1, String city) {
+ this.line1 = line1;
+ this.city = city;
+ }
+
public String getLine1() {
return line1;
}
diff --git a/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java b/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java
index ab0ee37be..cff0e3c01 100644
--- a/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java
+++ b/ebean-autotune/src/test/java/org/tests/model/basic/Customer.java
@@ -1,5 +1,8 @@
package org.tests.model.basic;
+import io.ebean.annotation.NotNull;
+
+import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@@ -8,13 +11,17 @@ import javax.persistence.Table;
@Table(name = "o_customer")
public class Customer extends BaseModel {
- String name;
+ @NotNull String name;
String note;
- @ManyToOne
+ @ManyToOne(cascade = CascadeType.PERSIST)
Address billingAddress;
+ public Customer(String name) {
+ this.name = name;
+ }
+
public String getName() {
return name;
}
diff --git a/ebean-autotune/src/test/java/org/tests/model/basic/Order.java b/ebean-autotune/src/test/java/org/tests/model/basic/Order.java
index dabc636fd..ddb5f0330 100644
--- a/ebean-autotune/src/test/java/org/tests/model/basic/Order.java
+++ b/ebean-autotune/src/test/java/org/tests/model/basic/Order.java
@@ -1,21 +1,10 @@
package org.tests.model.basic;
-import io.ebean.Model;
-import io.ebean.annotation.WhenModified;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.Version;
-import java.sql.Timestamp;
+import javax.persistence.*;
import java.time.LocalDate;
@Entity
-@Table(name = "orders")
+@Table(name = "o_order")
public class Order extends BaseModel {
public enum Status {
@@ -32,7 +21,11 @@ public class Order extends BaseModel {
LocalDate orderDate;
@ManyToOne(cascade = CascadeType.PERSIST)
- Customer customer;
+ final Customer customer;
+
+ public Order(Customer customer) {
+ this.customer = customer;
+ }
public Status getStatus() {
return status;
@@ -54,7 +47,4 @@ public class Order extends BaseModel {
return customer;
}
- public void setCustomer(Customer customer) {
- this.customer = customer;
- }
}
diff --git a/ebean-autotune/src/test/resources/application-test.properties b/ebean-autotune/src/test/resources/application-test.properties
index 5b8a89631..055b73429 100644
--- a/ebean-autotune/src/test/resources/application-test.properties
+++ b/ebean-autotune/src/test/resources/application-test.properties
@@ -9,3 +9,9 @@ datasource.h2.url=jdbc:h2:mem:h2AutoTune
datasource.pg.username=sa
datasource.pg.password=
datasource.pg.url=jdbc:h2:mem:h2AutoTune
+
+ebean.autoTune.profiling=true
+ebean.maxCallStack=10
+
+ebean.autoTune.queryTuning=true
+ebean.autoTune.queryTuningFile=autotune/my-autotune.xml
diff --git a/ebean-autotune/src/test/resources/autotune/my-autotune.xml b/ebean-autotune/src/test/resources/autotune/my-autotune.xml
new file mode 100644
index 000000000..d1085bb80
--- /dev/null
+++ b/ebean-autotune/src/test/resources/autotune/my-autotune.xml
@@ -0,0 +1,15 @@
+
+
+
+ org.tests.autofetch.MainAutoQueryTune1.tuneJoin(MainAutoQueryTune1.java:27)
+ org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
+ org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
+ org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
+ org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
+ org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
+ org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
+ org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
+ org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
+ org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
+
+
diff --git a/ebean-autotune/src/test/resources/logback-test.xml b/ebean-autotune/src/test/resources/logback-test.xml
index 8d97efd24..ee68548ba 100644
--- a/ebean-autotune/src/test/resources/logback-test.xml
+++ b/ebean-autotune/src/test/resources/logback-test.xml
@@ -12,10 +12,11 @@
+
-
+
-
+