--- /dev/null
+package net.java.examples.hmp.model.domain;\r
+\r
+import java.io.Serializable;\r
+\r
+import org.hibernate.proxy.HibernateProxy;\r
+\r
+public abstract class BaseEntity<T extends Serializable> implements IBaseEntity<T>, Serializable {\r
+\r
+ private static final long serialVersionUID = -5828097391861473323L;\r
+\r
+ /**\r
+ * {@inheritDoc}\r
+ */\r
+ @Override\r
+ public int hashCode() {\r
+ int result;\r
+ if (getId() == null) {\r
+ result = super.hashCode();\r
+ } else {\r
+ final int prime = 31;\r
+ result = 1;\r
+ result = prime * result + ((getId() == null) ? 0 : getId().hashCode());\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public boolean equals(final Object obj) {\r
+ if (this == obj) {\r
+ return true;\r
+ }\r
+ if (obj == null) {\r
+ return false;\r
+ }\r
+\r
+ Class<?> otherClass = null;\r
+ if (obj instanceof HibernateProxy) {\r
+ otherClass = ((HibernateProxy) obj).getHibernateLazyInitializer().getPersistentClass();\r
+ } else {\r
+ otherClass = obj.getClass();\r
+ }\r
+ if (getClass() != otherClass) {\r
+ return false;\r
+ }\r
+\r
+ return compareEqualityWithThisInstance((BaseEntity<?>) obj);\r
+ }\r
+\r
+ private boolean compareEqualityWithThisInstance(BaseEntity<?> otherEntity) {\r
+ if (getId() != null) {\r
+ return getId().equals(otherEntity.getId());\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ return this.getClass().getName() + "[id=" + getId() + "]";\r
+ }\r
+}\r