From cc6469851bcef07504ef7f72a3fa755f11d1ed46 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 24 Nov 2016 22:05:27 +1300 Subject: [PATCH] #897 - Remove @EmbeddedColumns ... replace with @Embedded(prefix="...") --- pom.xml | 4 +-- .../deploy/BeanEmbeddedMetaFactory.java | 6 ++-- .../meta/DeployBeanPropertyAssocOne.java | 12 ++++++- .../deploy/parse/AnnotationAssocOnes.java | 34 ++++++------------- .../server/deploy/parse/AnnotationFields.java | 21 ------------ .../avaje/tests/ddd/iud/TestDPersonEl.java | 2 ++ .../com/avaje/tests/model/ddd/DPerson.java | 3 -- .../avaje/tests/model/embedded/EInvoice.java | 13 ++----- 8 files changed, 31 insertions(+), 64 deletions(-) diff --git a/pom.xml b/pom.xml index b1b896bd2..34655590d 100644 --- a/pom.xml +++ b/pom.xml @@ -35,13 +35,13 @@ org.avaje.ebean persistence-api - 2.1.2 + 2.1.3 org.avaje.ebean ebean-annotation - 1.1 + 1.2 diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java index 9794c9963..e86e7714f 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java @@ -28,19 +28,21 @@ public class BeanEmbeddedMetaFactory { } // deployment override information (column names) + String columnPrefix = prop.getColumnPrefix(); Map propColMap = prop.getDeployEmbedded().getPropertyColumnMap(); BeanProperty[] sourceProperties = targetDesc.propertiesBaseScalar(); - BeanProperty[] embeddedProperties = new BeanProperty[sourceProperties.length]; for (int i = 0; i < sourceProperties.length; i++) { - String propertyName = sourceProperties[i].getName(); String dbColumn = propColMap.get(propertyName); if (dbColumn == null) { // dbColumn not overridden so take original dbColumn = sourceProperties[i].getDbColumn(); + if (columnPrefix != null) { + dbColumn = columnPrefix + dbColumn; + } } BeanPropertyOverride overrides = new BeanPropertyOverride(dbColumn); diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java index c9391d010..8dd09cb59 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java @@ -13,6 +13,8 @@ public class DeployBeanPropertyAssocOne extends DeployBeanPropertyAssoc { private DeployBeanEmbedded deployEmbedded; + private String columnPrefix; + /** * Create the property. */ @@ -96,7 +98,7 @@ public class DeployBeanPropertyAssocOne extends DeployBeanPropertyAssoc { tableJoin.setLocalColumn(dbColumn); } } - + @Override public void setSqlFormula(String formulaSelect, String formulaJoin) { super.setSqlFormula(formulaSelect, formulaJoin); @@ -105,4 +107,12 @@ public class DeployBeanPropertyAssocOne extends DeployBeanPropertyAssoc { columns[0].setLocalSqlFormula(formulaSelect); } } + + public void setColumnPrefix(String columnPrefix) { + this.columnPrefix = columnPrefix; + } + + public String getColumnPrefix() { + return columnPrefix; + } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java index 6f263b946..73f61a135 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java @@ -1,7 +1,12 @@ package com.avaje.ebeaninternal.server.deploy.parse; -import java.util.Map; -import java.util.Set; +import com.avaje.ebean.annotation.Where; +import com.avaje.ebean.config.NamingConvention; +import com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager; +import com.avaje.ebeaninternal.server.deploy.BeanTable; +import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanProperty; +import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocOne; +import com.avaje.ebeaninternal.server.query.SqlJoinType; import javax.persistence.Column; import javax.persistence.Embedded; @@ -13,16 +18,6 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import javax.validation.constraints.NotNull; -import com.avaje.ebean.annotation.EmbeddedColumns; -import com.avaje.ebean.annotation.Where; -import com.avaje.ebean.config.NamingConvention; -import com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager; -import com.avaje.ebeaninternal.server.deploy.BeanTable; -import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanProperty; -import com.avaje.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocOne; -import com.avaje.ebeaninternal.server.lib.util.StringHelper; -import com.avaje.ebeaninternal.server.query.SqlJoinType; - /** * Read the deployment annotations for Associated One beans. */ @@ -62,7 +57,7 @@ public class AnnotationAssocOnes extends AnnotationParser { } Embedded embedded = get(prop, Embedded.class); if (embedded != null) { - readEmbedded(prop); + readEmbedded(prop, embedded); } EmbeddedId emId = get(prop, EmbeddedId.class); if (emId != null) { @@ -195,7 +190,7 @@ public class AnnotationAssocOnes extends AnnotationParser { prop.setBeanTable(assoc); } - private void readEmbedded(DeployBeanPropertyAssocOne prop) { + private void readEmbedded(DeployBeanPropertyAssocOne prop, Embedded embedded) { if (descriptor.isDocStoreOnly() && prop.getDocStoreDoc() == null) { prop.setDocStoreEmbedded(""); @@ -203,16 +198,7 @@ public class AnnotationAssocOnes extends AnnotationParser { prop.setEmbedded(); prop.setDbInsertable(true); prop.setDbUpdateable(true); - - EmbeddedColumns columns = get(prop, EmbeddedColumns.class); - if (columns != null) { - - // convert into a Map - String propColumns = columns.columns(); - Map propMap = StringHelper.delimitedToMap(propColumns, ",", "="); - - prop.getDeployEmbedded().putAll(propMap); - } + prop.setColumnPrefix(embedded.prefix()); readEmbeddedAttributeOverrides(prop); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java index e03098161..edfdac0a4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationFields.java @@ -288,27 +288,6 @@ public class AnnotationFields extends AnnotationParser { } } - EmbeddedColumns columns = get(prop, EmbeddedColumns.class); - if (columns != null) { - if (prop instanceof DeployBeanPropertyCompound) { - DeployBeanPropertyCompound p = (DeployBeanPropertyCompound) prop; - - // convert into a Map - String propColumns = columns.columns(); - Map propMap = StringHelper.delimitedToMap(propColumns, ",", "="); - - p.getDeployEmbedded().putAll(propMap); - - CtCompoundType compoundType = p.getCompoundType(); - if (compoundType == null) { - throw new RuntimeException("No registered CtCompoundType for " + p.getPropertyType()); - } - - } else { - throw new RuntimeException("Can't use EmbeddedColumns on ScalarType " + prop.getFullBeanName()); - } - } - // Want to process last so we can use with @Formula Transient t = get(prop, Transient.class); if (t != null) { diff --git a/src/test/java/com/avaje/tests/ddd/iud/TestDPersonEl.java b/src/test/java/com/avaje/tests/ddd/iud/TestDPersonEl.java index 35825ceda..6305ecc3a 100644 --- a/src/test/java/com/avaje/tests/ddd/iud/TestDPersonEl.java +++ b/src/test/java/com/avaje/tests/ddd/iud/TestDPersonEl.java @@ -29,6 +29,8 @@ public class TestDPersonEl { p.setSalary(new Money("12200")); p.setCmoney(new CMoney(new Money("12"), NZD)); + Ebean.save(p); + SpiServer server = Ebean.getDefaultServer().getPluginApi(); BeanType descriptor = server.getBeanType(DPerson.class); diff --git a/src/test/java/com/avaje/tests/model/ddd/DPerson.java b/src/test/java/com/avaje/tests/model/ddd/DPerson.java index 4bf2d702d..83a6abd9e 100644 --- a/src/test/java/com/avaje/tests/model/ddd/DPerson.java +++ b/src/test/java/com/avaje/tests/model/ddd/DPerson.java @@ -1,6 +1,5 @@ package com.avaje.tests.model.ddd; -import com.avaje.ebean.annotation.EmbeddedColumns; import com.avaje.tests.model.ivo.CMoney; import com.avaje.tests.model.ivo.Money; import com.avaje.tests.model.ivo.Oid; @@ -21,10 +20,8 @@ public class DPerson { Money salary; - @EmbeddedColumns(columns = "amount=a_amt, currency=a_curr") CMoney cmoney; - @EmbeddedColumns(columns = "startMillis=i_start, endMillis=i_end") Interval interval; public String toString() { diff --git a/src/test/java/com/avaje/tests/model/embedded/EInvoice.java b/src/test/java/com/avaje/tests/model/embedded/EInvoice.java index 6ee555878..638742748 100644 --- a/src/test/java/com/avaje/tests/model/embedded/EInvoice.java +++ b/src/test/java/com/avaje/tests/model/embedded/EInvoice.java @@ -2,9 +2,6 @@ package com.avaje.tests.model.embedded; import com.avaje.ebean.annotation.Cache; -import javax.persistence.AttributeOverride; -import javax.persistence.AttributeOverrides; -import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.Id; @@ -33,16 +30,10 @@ public class EInvoice { @ManyToOne EPerson person; - @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "street", column = @Column(name = "ship_street")), - @AttributeOverride(name = "suburb", column = @Column(name = "ship_suburb")), - @AttributeOverride(name = "city", column = @Column(name = "ship_city")), - @AttributeOverride(name = "status", column = @Column(name = "ship_status")) - }) + @Embedded(prefix = "ship_") EAddress shipAddress; - @Embedded + @Embedded(prefix = "bill_") EAddress billAddress; public Long getId() {