In meinem Programm Ich habe folgende Einheit:Doppelte Eigenschaft Mapping verursacht JPA viele zu viele - eins zu mehreren Selbst auf Wildfly9 Join
@Entity
@Table(name="ta_seg_perfiles")
@NamedQuery(name="Perfil.findAll", query="SELECT p FROM Perfil p")
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="fecha_alta")
private Date fechaAlta;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_modificado")
private Date fechaModificado;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="fecha_baja")
private Date fechaBaja;
@Column(nullable=false, length=15)
private String auditor;
@OneToMany
@JoinTable(
name="ta_seg_perfiles_perfiles",
joinColumns={@JoinColumn(name="perfil", referencedColumnName ="perfil")},
inverseJoinColumns={@JoinColumn(name="perfil_asig", referencedColumnName="perfil")}
)
private Collection<Perfil> perfilesAsignados;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(
name="ta_seg_perfiles_funciones",
[email protected](name="perfil", referencedColumnName="perfil"),
[email protected](name="funcion", referencedColumnName="funcion", nullable=false, insertable=false, updatable=false)
)
private Collection<Funcion> funciones;
@OneToMany(mappedBy="perfil")
private Collection<PermisosFuncion> permisosFunciones;
@OneToMany(mappedBy="perfil")
private Collection<PermisosPagina> 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<Perfil> getPerfilesAsignados() {
return perfilesAsignados;
}
public void setPerfilesAsignados(Collection<Perfil> perfilesAsignados) {
this.perfilesAsignados = perfilesAsignados;
}
public Collection<Funcion> getFunciones() {
return funciones;
}
public void setFunciones(Collection<Funcion> funciones) {
this.funciones = funciones;
}
public Collection<PermisosFuncion> getPermisosFunciones() {
return permisosFunciones;
}
public void setPermisosFunciones(Collection<PermisosFuncion> permisosFunciones) {
this.permisosFunciones = permisosFunciones;
}
public Collection<PermisosPagina> getPermisosPaginas() {
return permisosPaginas;
}
public void setPermisosPaginas(Collection<PermisosPagina> 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;
}
Wich, soweit ich keinen Fehler hat berichten. Allerdings, wenn ich die Anwendung auf meinem lokalen Wildfly9 Server bereitstellen es wirft mich die folgende Ausnahme:
15:14:48,270 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 288) MSC000001: Failed to start service jboss.persistenceunit."Acumar.ear#Acumar-JPA": org.jboss.msc.service.StartException in service jboss.persistenceunit."Acumar.ear#Acumar-JPA": 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
Kann mir jemand sagen, was mache ich falsch bzw. wie kann ich dieses Problem beheben? Vielen Dank.
Könnte es das gleiche Problem sein, das hier erwähnt wird http://stackoverflow.com/questions/25708724/how-to-fix-duplicate-property-mapping-exception in Bezug auf https://hibernate.atlassian.net/browse/ HHH-5836 und – Chris