From ffb11019fa53d5bbc8431ba920468aea2b39d900 Mon Sep 17 00:00:00 2001
From: rob bygrave
Date: Mon, 23 Dec 2019 13:30:28 +1300
Subject: [PATCH] #1896 - ebean.allQuotedIdentifiers is ignored for @JoinColumn
---
.../server/deploy/meta/DeployTableJoin.java | 17 ++++++++++-------
.../deploy/meta/DeployTableJoinColumn.java | 17 ++++++++---------
.../deploy/parse/AnnotationAssocManys.java | 8 ++++----
.../deploy/parse/AnnotationAssocOnes.java | 2 +-
.../server/deploy/parse/DeployUtil.java | 9 ++++++++-
5 files changed, 31 insertions(+), 22 deletions(-)
diff --git a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java
index a63f60531..517318872 100644
--- a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java
+++ b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java
@@ -2,6 +2,7 @@ package io.ebeaninternal.server.deploy.meta;
import io.ebeaninternal.server.deploy.BeanTable;
import io.ebeaninternal.server.deploy.InheritInfo;
+import io.ebeaninternal.server.deploy.parse.DeployUtil;
import io.ebeaninternal.server.query.SqlJoinType;
import javax.persistence.JoinColumn;
@@ -74,31 +75,33 @@ public class DeployTableJoin {
* The order is generally true for OneToMany and false for ManyToOne relationships.
*
*/
- public void addJoinColumn(boolean order, JoinColumn jc, BeanTable beanTable) {
+ public void addJoinColumn(DeployUtil deploy, boolean order, JoinColumn jc, BeanTable beanTable) {
if (!"".equals(jc.table())) {
- setTable(jc.table());
+ setTable(deploy.convertQuotes(jc.table()));
}
if (!"".equals(jc.name()) || !"".equals(jc.referencedColumnName())) {
// only add the join column details when name or referencedColumnName is specified
- addJoinColumn(new DeployTableJoinColumn(order, jc, beanTable));
+ String ref = deploy.convertQuotes(jc.referencedColumnName());
+ String nam = deploy.convertQuotes(jc.name());
+ addJoinColumn(new DeployTableJoinColumn(order, ref, nam, jc.insertable(), jc.updatable(), beanTable));
}
}
/**
* Add a JoinColumn array.
*/
- public void addJoinColumn(boolean order, JoinColumn[] jcArray, BeanTable beanTable) {
+ public void addJoinColumn(DeployUtil util, boolean order, JoinColumn[] jcArray, BeanTable beanTable) {
for (JoinColumn aJcArray : jcArray) {
- addJoinColumn(order, aJcArray, beanTable);
+ addJoinColumn(util, order, aJcArray, beanTable);
}
}
/**
* Add a JoinColumn set.
*/
- public void addJoinColumn(boolean order, Set joinColumns, BeanTable beanTable) {
+ public void addJoinColumn(DeployUtil util, boolean order, Set joinColumns, BeanTable beanTable) {
for (JoinColumn joinColumn : joinColumns) {
- addJoinColumn(order, joinColumn, beanTable);
+ addJoinColumn(util, order, joinColumn, beanTable);
}
}
diff --git a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java
index 0e9d819ab..da4bf0339 100644
--- a/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java
+++ b/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java
@@ -54,6 +54,14 @@ public class DeployTableJoinColumn {
this.updateable = updateable;
}
+ public DeployTableJoinColumn(boolean order, String ref, String name, boolean insertable, boolean updateable, BeanTable beanTable) {
+ this(ref, name, insertable, updateable);
+ setReferencedColumn(beanTable);
+ if (!order) {
+ reverse();
+ }
+ }
+
void setLocalSqlFormula(String localSqlFormula) {
if (localSqlFormula != null) {
this.localSqlFormula = localSqlFormula;
@@ -80,15 +88,6 @@ public class DeployTableJoinColumn {
return foreignSqlFormula;
}
-
- public DeployTableJoinColumn(boolean order, JoinColumn jc, BeanTable beanTable) {
- this(jc.referencedColumnName(), jc.name(), jc.insertable(), jc.updatable());
- setReferencedColumn(beanTable);
- if (!order) {
- reverse();
- }
- }
-
private void setReferencedColumn(BeanTable beanTable) {
if (localDbColumn == null) {
BeanProperty idProperty = beanTable.getIdProperty();
diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
index 829377ff0..027702c98 100644
--- a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
+++ b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java
@@ -140,7 +140,7 @@ class AnnotationAssocManys extends AnnotationParser {
Set joinColumns = getAll(prop, JoinColumn.class);
if (joinColumns != null) {
- prop.getTableJoin().addJoinColumn(true, joinColumns, beanTable);
+ prop.getTableJoin().addJoinColumn(util, true, joinColumns, beanTable);
}
JoinTable joinTable = get(prop, JoinTable.class);
@@ -210,7 +210,7 @@ class AnnotationAssocManys extends AnnotationParser {
BeanTable localTable = factory.getBeanTable(descriptor.getBeanType());
if (collectionTable != null) {
- prop.getTableJoin().addJoinColumn(true, collectionTable.joinColumns(), localTable);
+ prop.getTableJoin().addJoinColumn(util, true, collectionTable.joinColumns(), localTable);
}
if (!prop.getTableJoin().hasJoinColumns()) {
BeanProperty localId = localTable.getIdProperty();
@@ -326,11 +326,11 @@ class AnnotationAssocManys extends AnnotationParser {
intJoin.setTable(intTableName);
// add the source to intersection join columns
- intJoin.addJoinColumn(true, joinTable.joinColumns(), prop.getBeanTable());
+ intJoin.addJoinColumn(util, true, joinTable.joinColumns(), prop.getBeanTable());
// set the intersection to dest table join columns
DeployTableJoin destJoin = prop.getTableJoin();
- destJoin.addJoinColumn(false, joinTable.inverseJoinColumns(), prop.getBeanTable());
+ destJoin.addJoinColumn(util, false, joinTable.inverseJoinColumns(), prop.getBeanTable());
intJoin.setType(SqlJoinType.OUTER);
diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java
index 4e2084100..b2971413b 100644
--- a/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java
+++ b/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java
@@ -172,7 +172,7 @@ public class AnnotationAssocOnes extends AnnotationParser {
if (beanTable == null) {
throw new IllegalStateException("Looks like a missing @ManyToOne or @OneToOne on property " + prop.getFullBeanName() + " - no related 'BeanTable'");
}
- prop.getTableJoin().addJoinColumn(false, joinColumn, beanTable);
+ prop.getTableJoin().addJoinColumn(util, false, joinColumn, beanTable);
if (!joinColumn.updatable()) {
prop.setDbUpdateable(false);
}
diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java b/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java
index 5e68bc052..1d88478a6 100644
--- a/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java
+++ b/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java
@@ -1,10 +1,10 @@
package io.ebeaninternal.server.deploy.parse;
import io.ebean.annotation.DbArray;
-import io.ebean.annotation.DbMap;
import io.ebean.annotation.DbJson;
import io.ebean.annotation.DbJsonB;
import io.ebean.annotation.DbJsonType;
+import io.ebean.annotation.DbMap;
import io.ebean.config.EncryptDeploy;
import io.ebean.config.EncryptDeployManager;
import io.ebean.config.EncryptKeyManager;
@@ -291,4 +291,11 @@ public class DeployUtil {
boolean isUseJavaxValidationNotNull() {
return useJavaxValidationNotNull;
}
+
+ /**
+ * Convert quoted identifiers if necessary (including all quoted).
+ */
+ public String convertQuotes(String name) {
+ return dbPlatform.convertQuotedIdentifiers(name);
+ }
}