From c902caed245092637a847e50810e46c3a29607b3 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 14 Mar 2022 15:32:42 +1300 Subject: [PATCH] Fix is to delay the extra join added via BeanPropertyAssocOne until after the children nodes have joined. In this way the join is ONLY added if not already done so via a child node (SqlTreeNode). --- .../server/query/SqlTreeJoin.java | 2 ++ .../model/join/{Access.java => HAccess.java} | 26 +++++++++---------- .../join/{Account.java => HAccount.java} | 18 ++++++------- .../java/org/tests/model/join/HCustomer.java | 20 ++++++++++++++ 4 files changed, 43 insertions(+), 23 deletions(-) create mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeJoin.java rename ebean-test/src/test/java/org/tests/model/join/{Access.java => HAccess.java} (78%) rename ebean-test/src/test/java/org/tests/model/join/{Account.java => HAccount.java} (62%) create mode 100644 ebean-test/src/test/java/org/tests/model/join/HCustomer.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeJoin.java new file mode 100644 index 000000000..f7169fe0f --- /dev/null +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeJoin.java @@ -0,0 +1,2 @@ +package io.ebeaninternal.server.query;public interface SqlTreeJoin { +} diff --git a/ebean-test/src/test/java/org/tests/model/join/Access.java b/ebean-test/src/test/java/org/tests/model/join/HAccess.java similarity index 78% rename from ebean-test/src/test/java/org/tests/model/join/Access.java rename to ebean-test/src/test/java/org/tests/model/join/HAccess.java index 1d394e98d..ebc14d681 100644 --- a/ebean-test/src/test/java/org/tests/model/join/Access.java +++ b/ebean-test/src/test/java/org/tests/model/join/HAccess.java @@ -18,20 +18,20 @@ public abstract class Access { @Id UUID id; - + @ManyToOne @DbForeignKey(noConstraint = true) @JoinColumn(name = "accessor_id") - Customer accessor; + ACustomer accessor; @ManyToOne @DbForeignKey(noConstraint = true) @JoinColumn(name = "principal_id") - Customer principal; + ACustomer principal; @ManyToOne @DbForeignKey(noConstraint = true) - @JoinColumn(name = "account_account_number") + @JoinColumn(name = "access_account_number") Account account; public UUID getId() { @@ -42,22 +42,22 @@ public abstract class Access { this.id = id; } - public Customer getAccessor() { + public ACustomer getAccessor() { return accessor; } - - public void setAccessor(Customer accessor) { + + public void setAccessor(ACustomer accessor) { this.accessor = accessor; } - - public Customer getPrincipal() { + + public ACustomer getPrincipal() { return principal; } - public void setPrincipal(Customer principal) { + public void setPrincipal(ACustomer principal) { this.principal = principal; } - + public Account getAccount() { return account; } @@ -66,5 +66,5 @@ public abstract class Access { this.account = account; setPrincipal(account.getOwner()); } - -} \ No newline at end of file + +} diff --git a/ebean-test/src/test/java/org/tests/model/join/Account.java b/ebean-test/src/test/java/org/tests/model/join/HAccount.java similarity index 62% rename from ebean-test/src/test/java/org/tests/model/join/Account.java rename to ebean-test/src/test/java/org/tests/model/join/HAccount.java index ad2da2099..6820947bd 100644 --- a/ebean-test/src/test/java/org/tests/model/join/Account.java +++ b/ebean-test/src/test/java/org/tests/model/join/HAccount.java @@ -1,9 +1,6 @@ package org.tests.model.join; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.ManyToOne; +import javax.persistence.*; import org.tests.model.basic.Customer; @@ -13,9 +10,10 @@ public abstract class Account { @Id String accountNumber; - + @ManyToOne - Customer owner; + @JoinColumn(name = "owner_id")//, referencedColumnName = "id") + ACustomer owner; public String getAccountNumber() { return accountNumber; @@ -25,12 +23,12 @@ public abstract class Account { this.accountNumber = accountNumber; } - public Customer getOwner() { + public ACustomer getOwner() { return owner; } - public void setOwner(Customer owner) { + public void setOwner(ACustomer owner) { this.owner = owner; } - -} \ No newline at end of file + +} diff --git a/ebean-test/src/test/java/org/tests/model/join/HCustomer.java b/ebean-test/src/test/java/org/tests/model/join/HCustomer.java new file mode 100644 index 000000000..a78aaf773 --- /dev/null +++ b/ebean-test/src/test/java/org/tests/model/join/HCustomer.java @@ -0,0 +1,20 @@ +package org.tests.model.join; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class ACustomer { + + @Id + final String cid; + + final String name; + + String status = "A"; + + public ACustomer(String cid, String name) { + this.cid = cid; + this.name = name; + } +}