From 9fdb375229a485067d093f5eb13b0111ab303e21 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Tue, 30 Apr 2019 23:42:59 +1200 Subject: [PATCH] #1691 - Refactor io.ebean.Model to use a named database - support for use with non-default named database --- src/main/java/io/ebean/Model.java | 53 ++++++++----------- .../deploy/parse/DeployCreateProperties.java | 31 +++++------ .../tests/model/onetoone/album/BaseModel.java | 1 + 3 files changed, 36 insertions(+), 49 deletions(-) diff --git a/src/main/java/io/ebean/Model.java b/src/main/java/io/ebean/Model.java index 60d200869..9eae9b444 100644 --- a/src/main/java/io/ebean/Model.java +++ b/src/main/java/io/ebean/Model.java @@ -75,6 +75,25 @@ import io.ebean.bean.EntityBean; */ public abstract class Model { + /** + * The name of the database this entity will use, null for the default database. + */ + private final String _$dbName; + + /** + * Create using the default database. + */ + public Model() { + this._$dbName = null; + } + + /** + * Create with a named database (typically not the default database). + */ + public Model(String dbName) { + this._$dbName = dbName; + } + /** * Return the underlying 'default' Database. *

@@ -107,17 +126,8 @@ public abstract class Model { * * } */ - public static Database db() { - return DB.getDefault(); - } - - /** - * Return a named Database that is typically different to the default database. - * - * @param server The name of the Database. If this is null then the default Database is returned. - */ - public static Database db(String server) { - return DB.byName(server); + public Database db() { + return DB.byName(_$dbName); } /** @@ -245,27 +255,6 @@ public abstract class Model { return db().deletePermanent(this); } - /** - * Perform an update using this entity against the specified server. - */ - public void update(String server) { - db(server).update(this); - } - - /** - * Perform an insert using this entity against the specified server. - */ - public void insert(String server) { - db(server).insert(this); - } - - /** - * Perform a delete using this entity against the specified server. - */ - public boolean delete(String server) { - return db(server).delete(this); - } - /** * Refreshes this entity from the database. * diff --git a/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java b/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java index 7000ba2b1..1011eb23b 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java +++ b/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java @@ -1,5 +1,6 @@ package io.ebeaninternal.server.deploy.parse; +import io.ebean.Model; import io.ebean.annotation.DbArray; import io.ebean.annotation.DbHstore; import io.ebean.annotation.DbJson; @@ -64,17 +65,18 @@ public class DeployCreateProperties { *

*/ private boolean ignoreFieldByName(String fieldName) { - if (fieldName.startsWith("_ebean_") || fieldName.equals("_$targetDatabase")) { + if (fieldName.startsWith("_ebean_")) { // ignore Ebean internal fields return true; } - if (fieldName.startsWith("ajc$instance$")) { - // ignore AspectJ internal fields - return true; - } + // ignore AspectJ internal fields + return fieldName.startsWith("ajc$instance$"); + } - // we are interested in this field - return false; + private boolean ignoreField(Field field) { + return Modifier.isStatic(field.getModifiers()) + || Modifier.isTransient(field.getModifiers()) + || ignoreFieldByName(field.getName()); } /** @@ -83,6 +85,10 @@ public class DeployCreateProperties { */ private void createProperties(DeployBeanDescriptor desc, Class beanType, int level) { + if (beanType.equals(Model.class)) { + // ignore all fields on model (_$dbName) + return; + } boolean scalaObject = desc.isScalaObject(); try { @@ -92,16 +98,7 @@ public class DeployCreateProperties { for (int i = 0; i < fields.length; i++) { Field field = fields[i]; - if (Modifier.isStatic(field.getModifiers())) { - // not interested in static fields - logger.trace("Skipping static field {} in {}", field.getName(), beanType.getName()); - - } else if (Modifier.isTransient(field.getModifiers())) { - // not interested in transient fields - logger.trace("Skipping transient field {} in {}", field.getName(), beanType.getName()); - - } else if (!ignoreFieldByName(field.getName())) { - + if (!ignoreField(field)) { String fieldName = getFieldName(field, beanType); String initFieldName = initCap(fieldName); diff --git a/src/test/java/org/tests/model/onetoone/album/BaseModel.java b/src/test/java/org/tests/model/onetoone/album/BaseModel.java index 45b905518..3b316eb91 100644 --- a/src/test/java/org/tests/model/onetoone/album/BaseModel.java +++ b/src/test/java/org/tests/model/onetoone/album/BaseModel.java @@ -25,6 +25,7 @@ public abstract class BaseModel extends Model { protected DateTime lastUpdate; protected BaseModel() { + super(null); } public Long getId() {