From 632cf10096c62e1f640dc797891fd6e2c772d278 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 15 Nov 2016 22:48:36 +1300 Subject: [PATCH] #878 - @AttributeOverride (not wrapped in @AttributeOverrides) is not applied --- .../server/deploy/parse/AnnotationParser.java | 6 +++ .../tests/model/embedded/PrimaryRevision.java | 51 ++++++++++++++++++ .../tests/model/embedded/RevisionId.java | 53 +++++++++++++++++++ .../embedded/TestEmbeddedAttrOverride.java | 27 ++++++++++ src/test/resources/logback-test.xml | 8 +-- 5 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/avaje/tests/model/embedded/PrimaryRevision.java create mode 100644 src/test/java/com/avaje/tests/model/embedded/RevisionId.java create mode 100644 src/test/java/com/avaje/tests/model/embedded/TestEmbeddedAttrOverride.java diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java index 8ddb2422c..da7ac51a0 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationParser.java @@ -62,7 +62,13 @@ public abstract class AnnotationParser extends AnnotationBase { propMap.put(propName, columnName); } + prop.getDeployEmbedded().putAll(propMap); + } + AttributeOverride attrOverride = get(prop, AttributeOverride.class); + if (attrOverride != null) { + HashMap propMap = new HashMap<>(); + propMap.put(attrOverride.name(), attrOverride.column().name()); prop.getDeployEmbedded().putAll(propMap); } diff --git a/src/test/java/com/avaje/tests/model/embedded/PrimaryRevision.java b/src/test/java/com/avaje/tests/model/embedded/PrimaryRevision.java new file mode 100644 index 000000000..c69c3a0b0 --- /dev/null +++ b/src/test/java/com/avaje/tests/model/embedded/PrimaryRevision.java @@ -0,0 +1,51 @@ +package com.avaje.tests.model.embedded; + +import javax.persistence.AttributeOverride; +import javax.persistence.Column; +import javax.persistence.EmbeddedId; +import javax.persistence.Entity; +import javax.persistence.Version; + +@Entity +public class PrimaryRevision { + + @EmbeddedId +// @AttributeOverrides({ +// @AttributeOverride(name="primaryId", column = @Column(name="id")) +// }) + @AttributeOverride(name="primaryId", column = @Column(name="id")) + private RevisionId revisionId; + + String name; + + @Version + long version; + + public PrimaryRevision(long someId) { + this.revisionId = new RevisionId(someId, 1); + } + + public RevisionId getRevisionId() { + return revisionId; + } + + public void setRevisionId(RevisionId revisionId) { + this.revisionId = revisionId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } +} diff --git a/src/test/java/com/avaje/tests/model/embedded/RevisionId.java b/src/test/java/com/avaje/tests/model/embedded/RevisionId.java new file mode 100644 index 000000000..eb56c616f --- /dev/null +++ b/src/test/java/com/avaje/tests/model/embedded/RevisionId.java @@ -0,0 +1,53 @@ +package com.avaje.tests.model.embedded; + +import javax.persistence.Column; +import javax.persistence.Embeddable; + +@Embeddable +public class RevisionId { + + Long primaryId; + + Integer revision; + + public RevisionId() { + } + + public RevisionId(Long primaryId, Integer revision) { + this.revision = revision; + this.primaryId = primaryId; + } + + @Column(name = "revision") + public Integer getRevision() { + return revision; + } + + public void setRevision(Integer revision) { + this.revision = revision; + } + + public Long getPrimaryId() { + return primaryId; + } + + public void setPrimaryId(Long primaryId) { + this.primaryId = primaryId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + RevisionId that = (RevisionId) o; + if (!primaryId.equals(that.primaryId)) return false; + return revision.equals(that.revision); + } + + @Override + public int hashCode() { + int result = primaryId.hashCode(); + result = 31 * result + revision.hashCode(); + return result; + } +} diff --git a/src/test/java/com/avaje/tests/model/embedded/TestEmbeddedAttrOverride.java b/src/test/java/com/avaje/tests/model/embedded/TestEmbeddedAttrOverride.java new file mode 100644 index 000000000..4b1be9a9a --- /dev/null +++ b/src/test/java/com/avaje/tests/model/embedded/TestEmbeddedAttrOverride.java @@ -0,0 +1,27 @@ +package com.avaje.tests.model.embedded; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import org.avaje.ebeantest.LoggedSqlCollector; +import org.junit.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestEmbeddedAttrOverride extends BaseTestCase { + + @Test + public void insert() { + + PrimaryRevision bean = new PrimaryRevision(100); + bean.setName("hello"); + + LoggedSqlCollector.start(); + Ebean.save(bean); + + List sql = LoggedSqlCollector.stop(); + assertThat(sql).hasSize(1); + assertThat(sql.get(0)).contains("insert into primary_revision (id, revision, name, version) values (?,?,?,?)"); + } +} diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index 35785369c..c89a0efdd 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -79,9 +79,9 @@ - - - + + + @@ -96,4 +96,4 @@ - \ No newline at end of file +