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); + } }