diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java b/ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java new file mode 100644 index 000000000..32e5e3af8 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java @@ -0,0 +1,32 @@ +package org.tests.model.bridge; + +import javax.persistence.Embeddable; +import java.util.Objects; +import java.util.UUID; + +@Embeddable +public class BDManyId { + + private final UUID siteId; + private final UUID userId; + private final String name; + + public BDManyId(UUID siteId, UUID userId, String name) { + this.siteId = siteId; + this.userId = userId; + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BDManyId bdManyId = (BDManyId) o; + return siteId.equals(bdManyId.siteId) && userId.equals(bdManyId.userId) && name.equals(bdManyId.name); + } + + @Override + public int hashCode() { + return Objects.hash(siteId, userId, name); + } +} diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java index 4ff4513f4..220990cad 100644 --- a/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java +++ b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java @@ -1,9 +1,7 @@ package org.tests.model.bridge; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.Version; +import javax.persistence.*; +import java.util.List; import java.util.UUID; @Entity @@ -18,6 +16,10 @@ public class BSiteUserD { private BAccessLevel accessLevel; + @OneToMany(cascade = CascadeType.PERSIST) + @JoinColumns({@JoinColumn(name="site_id", referencedColumnName = "site_id"), @JoinColumn(name="user_id", referencedColumnName = "user_id")}) + private List children; + @Version private long version; @@ -58,4 +60,12 @@ public class BSiteUserD { public void setVersion(long version) { this.version = version; } + + public List children() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } } diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java new file mode 100644 index 000000000..4d7a84f95 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java @@ -0,0 +1,64 @@ +package org.tests.model.bridge; + +import javax.persistence.*; +import java.util.UUID; + +@Entity +@IdClass(BDManyId.class) +public class BSiteUserDMany { + + @Id + private UUID siteId; + @Id + private UUID userId; + @Id + String name; + + String many; + + @Version + long version; + + public UUID siteId() { + return siteId; + } + + public BSiteUserDMany siteId(UUID siteId) { + this.siteId = siteId; + return this; + } + + public UUID userId() { + return userId; + } + + public BSiteUserDMany userId(UUID userId) { + this.userId = userId; + return this; + } + + public String name() { + return name; + } + + public BSiteUserDMany name(String name) { + this.name = name; + return this; + } + + public long version() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + public String many() { + return many; + } + + public void setMany(String many) { + this.many = many; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java b/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java index a06c7e173..f378dbd29 100644 --- a/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java +++ b/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java @@ -41,6 +41,24 @@ public class TestIdClassScalar extends BaseTestCase { } + @Test + public void fetchMany() { + UUID siteId = UUID.randomUUID(); + UUID userId = UUID.randomUUID(); + + BSiteUserD access = new BSiteUserD(BAccessLevel.ONE, siteId, userId); + DB.save(access); + + final List found = DB.find(BSiteUserD.class) + .fetch("children") + .where().eq("siteId", siteId) + .findList(); + + assertThat(found).hasSize(1); + + DB.delete(BSiteUserD.class, new BEmbId(siteId, userId)); + } + @Test public void insertBatch() { UUID siteId = UUID.randomUUID();