From 90f786babd14c09f4404d627a701554918c2005b Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 22 Mar 2016 09:46:12 +1300 Subject: [PATCH] #610 - ManyToOne returns wrong ID value (prior ManyToOne with inheritance and null value). Regression introduced in 7.2.1. --- .../server/deploy/AssocOneHelpRefInherit.java | 2 ++ .../inheritance/TestInheritanceJoins.java | 35 +++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java index 6b642d0f6..ead82f1e6 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java @@ -34,6 +34,8 @@ class AssocOneHelpRefInherit extends AssocOneHelp { // read discriminator to determine the type InheritInfo rowInheritInfo = inherit.readType(ctx); if (rowInheritInfo == null) { + // ignore the id property + property.targetIdBinder.loadIgnore(ctx); return null; } diff --git a/src/test/java/com/avaje/tests/inheritance/TestInheritanceJoins.java b/src/test/java/com/avaje/tests/inheritance/TestInheritanceJoins.java index de0f36394..1b39a520f 100644 --- a/src/test/java/com/avaje/tests/inheritance/TestInheritanceJoins.java +++ b/src/test/java/com/avaje/tests/inheritance/TestInheritanceJoins.java @@ -16,35 +16,56 @@ import com.avaje.tests.inheritance.model.ProductConfiguration; public class TestInheritanceJoins extends BaseTestCase { - @Test public void testAssocOne() { - EbeanServer server = Ebean.getServer(null); + EbeanServer server = Ebean.getDefaultServer(); - final ProductConfiguration pc = new ProductConfiguration(); + ProductConfiguration pc = new ProductConfiguration(); pc.setName("PC1"); server.save(pc); - final GroupConfiguration gc = new GroupConfiguration(); + GroupConfiguration gc = new GroupConfiguration(); gc.setName("GC1"); server.save(gc); CalculationResult r = new CalculationResult(); - final Double charge = 100.0; - r.setCharge(charge); + r.setCharge(100.0); r.setProductConfiguration(pc); r.setGroupConfiguration(gc); server.save(r); Query q = server.createNamedQuery(CalculationResult.class, "loadResult"); - q.setParameter("charge", charge); + q.setParameter("charge", 100.0); List results = q.findList(); Assert.assertTrue(!results.isEmpty()); } + + @Test + public void assocOne_when_null() { + + EbeanServer server = Ebean.getDefaultServer(); + + GroupConfiguration gc = new GroupConfiguration(); + gc.setName("GC1"); + server.save(gc); + + CalculationResult r = new CalculationResult(); + r.setCharge(100.0); + + // @ManyToOne with inheritance and null + r.setProductConfiguration(null); + r.setGroupConfiguration(gc); + server.save(r); + + CalculationResult result = server.find(CalculationResult.class, r.getId()); + + GroupConfiguration group = result.getGroupConfiguration(); + Assert.assertEquals(group.getId(), gc.getId()); + } @Test public void testAssocOneWithNullAssoc() {