From b3d0c21a803d2c94f23d368c83e69129aa9f7a76 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 7 Aug 2019 22:28:51 +1200 Subject: [PATCH] #1783 - Save bean with only *ToMany relations with user generated ID --- .../server/deploy/BeanDescriptor.java | 2 +- src/test/java/org/tests/o2m/OMVertex.java | 38 ++++++++++++++++ .../java/org/tests/o2m/OMVertexOther.java | 18 ++++++++ .../org/tests/o2m/TestOneToManyOnlyBean.java | 44 +++++++++++++++++++ 4 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/tests/o2m/OMVertex.java create mode 100644 src/test/java/org/tests/o2m/OMVertexOther.java create mode 100644 src/test/java/org/tests/o2m/TestOneToManyOnlyBean.java diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java index 832539da7..c42f960a9 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java @@ -3202,7 +3202,7 @@ public class BeanDescriptor implements BeanType, STreeType { } boolean hasIdPropertyOnly(EntityBeanIntercept ebi) { - return ebi.hasIdOnly(idPropertyIndex); + return propertiesBaseScalar.length > 0 && ebi.hasIdOnly(idPropertyIndex); } public boolean isIdLoaded(EntityBeanIntercept ebi) { diff --git a/src/test/java/org/tests/o2m/OMVertex.java b/src/test/java/org/tests/o2m/OMVertex.java new file mode 100644 index 000000000..95d57d133 --- /dev/null +++ b/src/test/java/org/tests/o2m/OMVertex.java @@ -0,0 +1,38 @@ +package org.tests.o2m; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.List; +import java.util.UUID; + +@Entity +public class OMVertex { + + @Id + private UUID id; + + @OneToMany(cascade = CascadeType.ALL) + private List related; + + public OMVertex(UUID id) { + this.id = id; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public List getRelated() { + return related; + } + + public void setRelated(List related) { + this.related = related; + } +} diff --git a/src/test/java/org/tests/o2m/OMVertexOther.java b/src/test/java/org/tests/o2m/OMVertexOther.java new file mode 100644 index 000000000..237e4aa01 --- /dev/null +++ b/src/test/java/org/tests/o2m/OMVertexOther.java @@ -0,0 +1,18 @@ +package org.tests.o2m; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.UUID; + +@Entity +public class OMVertexOther { + + @Id + private UUID id; + + private final String name; + + public OMVertexOther(String name) { + this.name = name; + } +} diff --git a/src/test/java/org/tests/o2m/TestOneToManyOnlyBean.java b/src/test/java/org/tests/o2m/TestOneToManyOnlyBean.java new file mode 100644 index 000000000..2dccb4a1e --- /dev/null +++ b/src/test/java/org/tests/o2m/TestOneToManyOnlyBean.java @@ -0,0 +1,44 @@ +package org.tests.o2m; + +import io.ebean.BaseTestCase; +import io.ebean.DB; +import io.ebean.bean.EntityBean; +import io.ebeaninternal.server.deploy.BeanDescriptor; +import org.junit.Test; + +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class TestOneToManyOnlyBean extends BaseTestCase { + + @Test + public void insert() { + + OMVertex myBean = new OMVertex(UUID.randomUUID()); + DB.save(myBean); + + assertEquals(DB.find(OMVertex.class, myBean.getId()), myBean); + } + + @Test + public void isReference_when_newWithId_expectFalse() { + + OMVertex myBean = new OMVertex(UUID.randomUUID()); + assertFalse(isReference(myBean)); + } + + @Test + public void isReference_when_getReference_expectTrue() { + + OMVertex myBean = DB.getReference(OMVertex.class, UUID.randomUUID()); + assertTrue(isReference(myBean)); + } + + private boolean isReference(Object myBean) { + final BeanDescriptor desc = getBeanDescriptor(OMVertex.class); + return desc.isReference(((EntityBean) myBean)._ebean_getIntercept()); + } +}