#1896 - ebean.allQuotedIdentifiers is ignored for @JoinColumn

This commit is contained in:
rob bygrave
2019-12-23 13:30:28 +13:00
parent 71295077a5
commit ffb11019fa
5 changed files with 31 additions and 22 deletions
@@ -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.
* </p>
*/
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<JoinColumn> joinColumns, BeanTable beanTable) {
public void addJoinColumn(DeployUtil util, boolean order, Set<JoinColumn> joinColumns, BeanTable beanTable) {
for (JoinColumn joinColumn : joinColumns) {
addJoinColumn(order, joinColumn, beanTable);
addJoinColumn(util, order, joinColumn, beanTable);
}
}
@@ -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();
@@ -140,7 +140,7 @@ class AnnotationAssocManys extends AnnotationParser {
Set<JoinColumn> 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);
@@ -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);
}
@@ -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);
}
}