Java tutorial
/******************************************************************************* * Copyright (c) 2014 antoniomariasanchez at gmail.com. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * antoniomaria - initial API and implementation ******************************************************************************/ package net.sf.gazpachoquest.dto.support; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import com.fasterxml.jackson.annotation.JsonIgnore; @SuppressWarnings("serial") public abstract class AbstractIdentifiableDTO implements Identifiable { private Integer id; private Integer version; @Override public Integer getId() { return id; } /** * Current object version. Used to prevent updated conflicts in a concurrent * environment using a optimistic locking strategy. * * @see <a * href="http://en.wikibooks.org/wiki/Java_Persistence/Locking">Optimistic * Version Locking</a> * @return version */ public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } @Override public int hashCode() { if (!isNew()) { return new HashCodeBuilder().append(getId()).toHashCode(); } else { return HashCodeBuilder.reflectionHashCode(this); } } @Override public boolean equals(final Object obj) { if (obj instanceof Identifiable) { final Identifiable other = (Identifiable) obj; if (!isNew()) { return new EqualsBuilder().append(getId(), other.getId()).isEquals(); } else { return EqualsBuilder.reflectionEquals(this, obj); } } else { return false; } } @Override @JsonIgnore public boolean isNew() { return null == getId(); } public void setId(final Integer id) { this.id = id; } @Override public String toString() { return String.format("Entity of type %s with id: %s", this.getClass().getName(), getId()); } }