package ameba.db.ebean; import ameba.db.model.Model; import ameba.db.model.Persister; import io.ebean.Ebean; import io.ebean.EbeanServer; import io.ebean.Transaction; /** * Base-class for model-mapped models that provides convenience methods. * * @author sulijuan * */ public class EbeanPersister<M extends Model> extends Persister<M> { private EbeanServer server; /** * <p>Constructor for EbeanPersister.</p> * * @param serverName a {@link java.lang.String} object. * @param model a M object. */ public EbeanPersister(String serverName, M model) { super(serverName, model); server = Ebean.getServer(getServerName()); } private EbeanServer server() { return server; } /** * {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public <E extends M> Persister<E> on(String server) { return new EbeanPersister<>(server, (E) getModel()); } /** {@inheritDoc} */ @Override public void save() { server().save(getModel()); } /** * <p>save.</p> * * @param transaction a {@link io.ebean.Transaction} object. */ public void save(Transaction transaction) { server().save(getModel(), transaction); } /** {@inheritDoc} */ @Override public void update() { server().update(getModel()); } /** * <p>update.</p> * * @param t a {@link io.ebean.Transaction} object. */ public void update(Transaction t) { server().update(getModel(), t); } /** {@inheritDoc} */ public void update(Transaction t, boolean deleteMissingChildren) { server().update(getModel(), t, deleteMissingChildren); } /** {@inheritDoc} */ @Override public void update(boolean deleteMissingChildren) { Transaction t = server().currentTransaction(); t = t == null ? server().beginTransaction() : t; server().update(getModel(), t, deleteMissingChildren); } /** {@inheritDoc} */ @Override public void delete() { server().delete(getModel()); } /** {@inheritDoc} */ @Override public void delete(Transaction t) { server().delete(getModel(), t); } /** {@inheritDoc} */ @Override public void refresh() { server().refresh(getModel()); } /** {@inheritDoc} */ @Override public Persister<M> markAsDirty() { server().markAsDirty(getModel()); return this; } /** {@inheritDoc} */ @Override public void insert() { server().insert(getModel()); } /** * <p>insert.</p> * * @param t a {@link io.ebean.Transaction} object. */ public void insert(Transaction t) { server().insert(getModel(), t); } }