#2317 - Incorrect SQL generated for @IdClass with fetch() on ToMany path

This commit is contained in:
rbygrave
2021-08-16 22:20:21 +12:00
parent f7a0ae8b4a
commit 14262d4c25
4 changed files with 128 additions and 4 deletions
@@ -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);
}
}
@@ -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<BSiteUserDMany> children;
@Version
private long version;
@@ -58,4 +60,12 @@ public class BSiteUserD {
public void setVersion(long version) {
this.version = version;
}
public List<BSiteUserDMany> children() {
return children;
}
public void setChildren(List<BSiteUserDMany> children) {
this.children = children;
}
}
@@ -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;
}
}
@@ -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<BSiteUserD> 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();