Java tutorial
/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate; import org.hibernate.type.VersionType; /** * Represents a replication strategy. * * @author Gavin King * @see Session#replicate(Object, ReplicationMode) */ public enum ReplicationMode { /** * Throw an exception when a row already exists. */ EXCEPTION { @Override public boolean shouldOverwriteCurrentVersion(Object entity, Object currentVersion, Object newVersion, VersionType versionType) { throw new AssertionFailure("should not be called"); } }, /** * Ignore replicated entities when a row already exists. */ IGNORE { @Override public boolean shouldOverwriteCurrentVersion(Object entity, Object currentVersion, Object newVersion, VersionType versionType) { return false; } }, /** * Overwrite existing rows when a row already exists. */ OVERWRITE { @Override public boolean shouldOverwriteCurrentVersion(Object entity, Object currentVersion, Object newVersion, VersionType versionType) { return true; } }, /** * When a row already exists, choose the latest version. */ LATEST_VERSION { @Override @SuppressWarnings("unchecked") public boolean shouldOverwriteCurrentVersion(Object entity, Object currentVersion, Object newVersion, VersionType versionType) { // always overwrite non-versioned data (because we don't know which is newer) return versionType == null || versionType.getComparator().compare(currentVersion, newVersion) <= 0; } }; /** * Determine whether the mode dictates that the data being replicated should overwrite the data found. * * @param entity The entity being replicated * @param currentVersion The version currently on the target database table. * @param newVersion The replicating version * @param versionType The version type * * @return {@code true} indicates the data should be overwritten; {@code false} indicates it should not. */ public abstract boolean shouldOverwriteCurrentVersion(Object entity, Object currentVersion, Object newVersion, VersionType versionType); }