Duplicate property mapping caused JPA Many To Many - One To Many Self Join on Wildfly9
<p>In my program I have the following entity:</p>
<pre><code>@Entity
@Table(name=&quot;ta_seg_perfiles&quot;)
@NamedQuery(name=&quot;Perfil.findAll&quot;, query=&quot;SELECT p FROM Perfil p&quot;)
public class Perfil implements Serializable {
    private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(unique=true, nullable=false)
    private int id;
    
    @Column(nullable=false)
    private String perfil;
    
    @Column(nullable=false)
    private String descripcion;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name=&quot;fecha_alta&quot;)
    private Date fechaAlta;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name=&quot;fecha_modificado&quot;)
    private Date fechaModificado;
    
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name=&quot;fecha_baja&quot;)
    private Date fechaBaja;
    
    @Column(nullable=false, length=15)
    private String auditor;
    
    @OneToMany
    @JoinTable(
            name=&quot;ta_seg_perfiles_perfiles&quot;,
            joinColumns={@JoinColumn(name=&quot;perfil&quot;, referencedColumnName =&quot;perfil&quot;)},
            inverseJoinColumns={@JoinColumn(name=&quot;perfil_asig&quot;, referencedColumnName=&quot;perfil&quot;)}
            )
    private Collection&lt;Perfil&gt; perfilesAsignados;   
    
    
    @ManyToMany(fetch=FetchType.LAZY)
    @JoinTable(
            name=&quot;ta_seg_perfiles_funciones&quot;,
            joinColumns=@JoinColumn(name=&quot;perfil&quot;, referencedColumnName=&quot;perfil&quot;),
            inverseJoinColumns=@JoinColumn(name=&quot;funcion&quot;, referencedColumnName=&quot;funcion&quot;, nullable=false, insertable=false, updatable=false)
            )
    private Collection&lt;Funcion&gt; funciones;
    
    @OneToMany(mappedBy=&quot;perfil&quot;)
    private Collection&lt;PermisosFuncion&gt; permisosFunciones;
    
    @OneToMany(mappedBy=&quot;perfil&quot;)
    private Collection&lt;PermisosPagina&gt; permisosPaginas;
    
    
    public Perfil() {
    }


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getPerfil() {
        return perfil;
    }


    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }


    public String getDescripcion() {
        return descripcion;
    }


    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }


    public Date getFechaAlta() {
        return fechaAlta;
    }


    public void setFechaAlta(Date fechaAlta) {
        this.fechaAlta = fechaAlta;
    }


    public Date getFechaModificado() {
        return fechaModificado;
    }


    public void setFechaModificado(Date fechaModificado) {
        this.fechaModificado = fechaModificado;
    }


    public Date getFechaBaja() {
        return fechaBaja;
    }


    public void setFechaBaja(Date fechaBaja) {
        this.fechaBaja = fechaBaja;
    }


    public String getAuditor() {
        return auditor;
    }


    public void setAuditor(String auditor) {
        this.auditor = auditor;
    }
    

    public Collection&lt;Perfil&gt; getPerfilesAsignados() {
        return perfilesAsignados;
    }


    public void setPerfilesAsignados(Collection&lt;Perfil&gt; perfilesAsignados) {
        this.perfilesAsignados = perfilesAsignados;
    }


    public Collection&lt;Funcion&gt; getFunciones() {
        return funciones;
    }


    public void setFunciones(Collection&lt;Funcion&gt; funciones) {
        this.funciones = funciones;
    }


    public Collection&lt;PermisosFuncion&gt; getPermisosFunciones() {
        return permisosFunciones;
    }


    public void setPermisosFunciones(Collection&lt;PermisosFuncion&gt; permisosFunciones) {
        this.permisosFunciones = permisosFunciones;
    }


    public Collection&lt;PermisosPagina&gt; getPermisosPaginas() {
        return permisosPaginas;
    }


    public void setPermisosPaginas(Collection&lt;PermisosPagina&gt; permisosPaginas) {
        this.permisosPaginas = permisosPaginas;
    }


    /**
     * @param arg0
     * @return
     * @see java.util.Collection#add(java.lang.Object)
     */
    public Funcion addFuncion(Funcion funcion) {
        this.getFunciones().add(funcion);
        return funcion;
    }


    /**
     * @param arg0
     * @return
     * @see java.util.Collection#remove(java.lang.Object)
     */
    public Funcion removeFuncion(Funcion funcion) {
        this.getFunciones().remove(funcion);
        return funcion;
    }

    public Perfil addPerfilAsignado(Perfil perfil){
        this.getPerfilesAsignados().add(perfil);
        return perfil;
    }
    
    public Perfil removePerfilAsignado(Perfil perfil){
        this.getPerfilesAsignados().add(perfil);
        return perfil;
    }
    
    public PermisosFuncion addPermisosFuncion(PermisosFuncion permisos){
        this.getPermisosFunciones().add(permisos);
        return permisos;
    }
    
    public PermisosFuncion removePermisosFuncion(PermisosFuncion permisos){
        this.getPermisosFunciones().remove(permisos);
        permisos.setPerfil(this);
        return permisos;
    }
    
    public PermisosPagina addPermisosPagina(PermisosPagina permisos){
        this.getPermisosPaginas().add(permisos);
        permisos.setPerfil(null);
        return permisos;
    }
</code></pre>
<p>which, as far as I can tell has no error.  However when I deploy the application to my local Wildfly9 server it throws me the following exception:</p>
<pre><code>15:14:48,270 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 288) MSC000001: Failed to start service jboss.persistenceunit.&quot;Acumar.ear#Acumar-JPA&quot;: org.jboss.msc.service.StartException in service jboss.persistenceunit.&quot;Acumar.ear#Acumar-JPA&quot;: javax.persistence.PersistenceException: [PersistenceUnit: Acumar-JPA] Unable to build Hibernate SessionFactory
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:665)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: Acumar-JPA] Unable to build Hibernate SessionFactory
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
    at org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154)
    ... 7 more
Caused by: org.hibernate.MappingException: Duplicate property mapping of _ar_asimov_acumar_entidades_seguridad_Perfil_perfilesAsignados found in ar.asimov.acumar.entidades.seguridad.Perfil
    at org.hibernate.mapping.PersistentClass.checkPropertyDuplication(PersistentClass.java:515)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:505)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1360)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1851)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
    ... 12 more
</code></pre>
<p>Can anyone tell me what am I doing wrong or how can I fix this?</p>