#1101 - findNative() on a bean with an associated @OneToOne (with the PK being derived from the parent) maps incorrectly

This commit is contained in:
rob bygrave
2017-08-30 21:58:33 +12:00
parent 683186cbe9
commit 1d1fde61be
4 changed files with 128 additions and 1 deletions
@@ -0,0 +1,46 @@
package org.tests.model.onetoone;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
public class OtoBChild {
@Id
@Column(name = "master_id")
Integer id;
String child;
@OneToOne
@PrimaryKeyJoinColumn(name = "master_id", referencedColumnName = "id")
OtoBMaster master;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getChild() {
return child;
}
public void setChild(String child) {
this.child = child;
}
public OtoBMaster getMaster() {
return master;
}
public void setMaster(OtoBMaster master) {
this.master = master;
}
}
@@ -0,0 +1,43 @@
package org.tests.model.onetoone;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class OtoBMaster {
@Id
Long id;
String name;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "master")
OtoBChild child;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OtoBChild getChild() {
return child;
}
public void setChild(OtoBChild child) {
this.child = child;
}
}
@@ -0,0 +1,34 @@
package org.tests.model.onetoone;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import io.ebean.EbeanServer;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class TestOneToOneImportedPkNative extends BaseTestCase {
@Test
public void native_with_o2oAndImportedPrimaryKey() {
EbeanServer server = Ebean.getDefaultServer();
server.find(OtoBMaster.class).delete();
OtoBMaster one = new OtoBMaster();
one.setName("hello");
Ebean.save(one);
OtoBMaster m = server.findNative(OtoBMaster.class, "select * from oto_bmaster").findOne();
assertThat(m.getId()).isEqualTo(one.getId());
assertThat(m.getName()).isEqualTo(one.getName());
assertThat(m.getChild()).isNull();
OtoBMaster m2 = server.find(OtoBMaster.class, one.getId());
assertThat(m2.getId()).isEqualTo(one.getId());
assertThat(m2.getName()).isEqualTo(one.getName());
assertThat(m2.getChild()).isNull();
}
}