From cb6faa022beb328c9ee42a0c5485985471b6f1eb Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sat, 11 Apr 2015 19:16:36 +1200 Subject: [PATCH] Fix for #260 - Trying to insert() or save() an entity with no @Id results in NPE --- .../server/persist/dml/InsertMeta.java | 12 ++++-- .../com/avaje/tests/model/noid/NoIdBean.java | 43 +++++++++++++++++++ .../tests/model/noid/TestInsertNoIdBean.java | 26 +++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/avaje/tests/model/noid/NoIdBean.java create mode 100644 src/test/java/com/avaje/tests/model/noid/TestInsertNoIdBean.java diff --git a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/InsertMeta.java b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/InsertMeta.java index f76f7167c..b202bce00 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/persist/dml/InsertMeta.java +++ b/src/main/java/com/avaje/ebeaninternal/server/persist/dml/InsertMeta.java @@ -67,10 +67,16 @@ public final class InsertMeta { } else { // insert sql for db identity or sequence insert this.concatinatedKey = false; - this.identityDbColumns = new String[]{id.getIdentityColumn()}; + if (id.getIdentityColumn() == null) { + this.identityDbColumns = new String[]{}; + this.supportsGetGeneratedKeys = false; + this.selectLastInsertedId = null; + } else { + this.identityDbColumns = new String[]{id.getIdentityColumn()}; + this.supportsGetGeneratedKeys = dbPlatform.getDbIdentity().isSupportsGetGeneratedKeys(); + this.selectLastInsertedId = desc.getSelectLastInsertedId(); + } this.sqlNullId = genSql(true); - this.supportsGetGeneratedKeys = dbPlatform.getDbIdentity().isSupportsGetGeneratedKeys(); - this.selectLastInsertedId = desc.getSelectLastInsertedId(); } } diff --git a/src/test/java/com/avaje/tests/model/noid/NoIdBean.java b/src/test/java/com/avaje/tests/model/noid/NoIdBean.java new file mode 100644 index 000000000..e5565748b --- /dev/null +++ b/src/test/java/com/avaje/tests/model/noid/NoIdBean.java @@ -0,0 +1,43 @@ +package com.avaje.tests.model.noid; + +import com.avaje.ebean.annotation.CreatedTimestamp; + +import javax.persistence.Entity; +import javax.persistence.Table; +import java.sql.Timestamp; + +@Entity +@Table(name="noidbean") +public class NoIdBean { + + String name; + + String subject; + + @CreatedTimestamp + Timestamp whenCreated; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public Timestamp getWhenCreated() { + return whenCreated; + } + + public void setWhenCreated(Timestamp whenCreated) { + this.whenCreated = whenCreated; + } +} diff --git a/src/test/java/com/avaje/tests/model/noid/TestInsertNoIdBean.java b/src/test/java/com/avaje/tests/model/noid/TestInsertNoIdBean.java new file mode 100644 index 000000000..18ff9e86d --- /dev/null +++ b/src/test/java/com/avaje/tests/model/noid/TestInsertNoIdBean.java @@ -0,0 +1,26 @@ +package com.avaje.tests.model.noid; + +import com.avaje.ebean.BaseTestCase; +import com.avaje.ebean.Ebean; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class TestInsertNoIdBean extends BaseTestCase { + + @Test + public void testInsert() { + + + NoIdBean bean = new NoIdBean(); + bean.setName("Rocky"); + bean.setSubject("Blowing up stuff"); + + Ebean.save(bean); + + int rowCount = Ebean.find(NoIdBean.class).findRowCount(); + + assertTrue("rowCount:"+rowCount, rowCount > 0); + + } +}