title: Duplicate property mapping caused JPA Many To Many - One To Many Self Join on Wildfly9
body: <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>