package uk.co.his.test.embeddedCompoundKeysSimplified; import java.io.Serializable; import javax.persistence.Embeddable; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.ManyToOne; import javax.persistence.MapsId; import uk.co.his.test.embeddedCompoundKeysSimplified.ECompoundKeyMapItem.ECompoundKeyMapItemId; import uk.co.his.test.embeddedCompoundKeysSimplified.EContainer.DemoMode; @Entity public class ECompoundKeyMapSubItem { @Embeddable public static class ECompoundKeyMapSubItemId implements Serializable { private static final long serialVersionUID = 0L; private String subKey; private ECompoundKeyMapItemId prnt; public ECompoundKeyMapSubItemId() {} public ECompoundKeyMapSubItemId(String id, ECompoundKeyMapItemId parent) { this.subKey = id; this.prnt = parent; } @Override public boolean equals(Object o) { if(!(o instanceof ECompoundKeyMapSubItemId)) return false; ECompoundKeyMapSubItemId other = (ECompoundKeyMapSubItemId) o; return prnt.equals(other.prnt) && subKey.equals(other.subKey); } @Override public int hashCode() { //Follow bloch Item 8. int result = 17; result = 37*result + subKey.hashCode(); result = 37*result + prnt.hashCode(); return result; } public String getSubKey() { return subKey; } public ECompoundKeyMapItemId getParent() { return prnt; } } @EmbeddedId private ECompoundKeyMapSubItemId id; @ManyToOne(fetch=FetchType.LAZY) @MapsId("prnt") private ECompoundKeyMapItem parent; public ECompoundKeyMapSubItem() { id = new ECompoundKeyMapSubItemId(); } public ECompoundKeyMapItem getParent() { return parent; } public void setParent(ECompoundKeyMapItem parent) { if(EContainer.DEMO_MODE != DemoMode.WORKS_MAINTENANCE || EContainer.DEMO_MODE == DemoMode.ALL_EMBEDDED_MAINTENANCE) { this.id.prnt = parent.id; } this.parent = parent; } public String getSubKey() { return id.subKey; } public void setSubKey(String subKey) { this.id.subKey = subKey; } }