Entity Bean inheritance definition
Base superclass extending IdentityhashMap:
public class EntityModel<K extends String, V extends Object> extends IdentityHashMap<String, Object>{ public EntityModel() { super(); } }
Entity JPA:
@Entity @Table(name = "acl_usuario") @SequenceGenerator(name = "global_seq", sequenceName = "global_seq", allocationSize = 20) public class Usuario extends EntityModel{ @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "global_seq") @Basic(optional = false) @Column(name = "id", nullable = false) protected Long id; @Basic(optional = false) @Column(name = "username", length = 50, nullable = false) protected String username; @Basic(optional = false) @Column(name = "pass", length = 20, nullable = false) protected String pass; @Basic(optional = false) @Column(name = "habilitado", nullable = false) protected Boolean habilitado; @JoinColumn(name = "rol", referencedColumnName = "id") @ManyToOne(optional = false) private Rol rol; @OneToMany(mappedBy = "supervisor", fetch = FetchType.LAZY) private Collection<OrdenTrabajo> supervisorCollection; @OneToMany(mappedBy = "responsable", fetch = FetchType.LAZY) private Collection<OrdenTrabajo> responsableCollection; public Usuario() { super(); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public Boolean getHabilitado() { return habilitado; } public void setHabilitado(Boolean habilitado) { this.habilitado = habilitado; } public Rol getRol() { return rol; } public void setRol(Rol rol) { this.rol = rol; } public Collection<OrdenTrabajo> getSupervisorCollection() { return supervisorCollection; } public void setSupervisorCollection(Collection<OrdenTrabajo> supervisorCollection) { this.supervisorCollection = supervisorCollection; } public Collection<OrdenTrabajo> getResponsableCollection() { return responsableCollection; } public void setResponsableCollection(Collection<OrdenTrabajo> responsableCollection) { this.responsableCollection = responsableCollection; } @Override public int hashCode() { int hash = 3; hash = 59 * hash + (this.id != null ? this.id.hashCode() : 0); return hash; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Usuario other = (Usuario) obj; if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) { return false; } return true; } }
With Eclipselink default configuration got NoSuchMethodError.
The fix
Disable eclipselink.weaving.internal configuration. (https://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/p_weaving_internal.htm)
In persistence.xml
<property name="eclipselink.weaving.internal" value="false"/>
In property map
propertiesMap.put(PersistenceUnitProperties.WEAVING_INTERNAL, "false");
In Spring
<bean id="jpaVendorAdapter" class="de.mischur.library.utils.ExtendedEclipseLinkJpaVendorAdapter"> <property name="weavingInternal" value="false"> </property></bean>