NoSuchMethodError when having an Map abstract class extending abstractmap in EclipseLink

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>