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.companymanager.domain.support; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import javax.persistence.Version; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @SuppressWarnings("serial") @MappedSuperclass public class AbstractPersistable implements Persistable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Version private Integer version; @Override public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public boolean isNew() { return null == getId(); } /** * 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> */ 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(Object obj) { if (obj instanceof Persistable) { final Persistable other = (Persistable) obj; if (!isNew()) { return (new EqualsBuilder()).append(getId(), other.getId()).isEquals(); } else { return EqualsBuilder.reflectionEquals(this, obj); } } else { return false; } } @Override public String toString() { return String.format("Entity of type %s with id: %s", this.getClass().getName(), getId()); } }