有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我正在做一个Hibernate项目,在这个项目中,我的数据库有很多多对多的关系,我在映射中遇到了一个错误。错误和涉及的类:

以下是错误:

Failed to create sessionFactory object.org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
Exception in thread "main" java.lang.ExceptionInInitializerError
    at main.HibernateMain.main(HibernateMain.java:33)
Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:123)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:77)
    at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:137)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at main.HibernateMain.main(HibernateMain.java:30)
Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:91)
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:116)
    at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:382)
    at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:551)
    at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:124)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:96)
    ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:88)
    ... 16 more
Caused by: org.hibernate.PropertyNotFoundException: Could not locate getter method for property [idioma_materno.Idioma_materno#idioma_maternos]
    at org.hibernate.internal.util.ReflectHelper.findGetterMethod(ReflectHelper.java:437)
    at org.hibernate.property.access.internal.PropertyAccessBasicImpl.<init>(PropertyAccessBasicImpl.java:41)
    at org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl.buildPropertyAccess(PropertyAccessStrategyBasicImpl.java:27)
    at org.hibernate.mapping.Property.getGetter(Property.java:308)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:254)
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:144)
    at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:58)
    ... 21 more

下面是我为“Linguista”表定义代码的主要类:

package Linguista;


import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import idioma_materno.Idioma_materno;
import idioma_source.Idioma_source;
import idioma_target.Idioma_target;

import javax.persistence.JoinColumn;

import servicios.Servicio;
import software.Software;




@Entity
@Table(name="Linguista")
public class Linguista implements Serializable {
    @Id
    @Column(name="LinguistaID")
    private int linguistaid;
    
    @Column(name="nombre")
    private String nombre;
    
    @Column(name="apellido")
    private String apellido;
    
    @Column(name="mail")
    private String mail;
    
    @Column(name="pais")
    private String pais;
    
    @Column(name="experiencia")
    private String experiencia;
    
    @Column(name="plataforma")
    private String plataforma;
    
    @Column(name="link")
    private String link;
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
      name = "Linguista_Servicios", 
      joinColumns = { @JoinColumn(name = "LinguistaID") }, 
      inverseJoinColumns = { @JoinColumn(name = "ServicioID") }
    )
    Set<Servicio> servicios = new HashSet<Servicio>();
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
      name = "Linguista_Software", 
      joinColumns = { @JoinColumn(name = "LinguistaID") }, 
      inverseJoinColumns = { @JoinColumn(name = "SoftwareID") }
    )
    Set<Software> softwares = new HashSet<Software>();
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
      name = "Linguista_Especializacion", 
      joinColumns = { @JoinColumn(name = "LinguistaID") }, 
      inverseJoinColumns = { @JoinColumn(name = "EspecializacionID") }
    )
    Set<especializacion.Especializacion> especializaciones = new HashSet<especializacion.Especializacion>();
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
      name = "Linguista_Idioma_target", 
      joinColumns = { @JoinColumn(name = "LinguistaID") }, 
      inverseJoinColumns = { @JoinColumn(name = "IdiomaID") }
    )
    Set<Idioma_target> idioma_targets = new HashSet<Idioma_target>();
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
      name = "Linguista_Idioma_Source", 
      joinColumns = { @JoinColumn(name = "LinguistaID") }, 
      inverseJoinColumns = { @JoinColumn(name = "IdiomaID") }
    )
    Set<idioma_source.Idioma_source> idioma_sources = new HashSet<idioma_source.Idioma_source>();
    
    
    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
      name = "Linguista_Idioma_Materno", 
      joinColumns = { @JoinColumn(name = "LinguistaID") }, 
      inverseJoinColumns = { @JoinColumn(name = "IdiomaID") }
    )
    Set<idioma_materno.Idioma_materno> idioma_maternos = new HashSet<idioma_materno.Idioma_materno>();

    
    public Linguista() {}
    


    public Linguista(int linguistaID, String nombre, String apellido, String mail, String pais, String experiencia,
            String plataforma, String link, Set<Servicio> servicios, Set<Software> softwares,
            Set<especializacion.Especializacion> especializacion, Set<Idioma_target> idioma_targets,
            Set<Idioma_source> idioma_sources, Set<Idioma_materno> idioma_maternos) {
        super();
        this.linguistaid = linguistaID;
        this.nombre = nombre;
        this.apellido = apellido;
        this.mail = mail;
        this.pais = pais;
        this.experiencia = experiencia;
        this.plataforma = plataforma;
        this.link = link;
        this.servicios = servicios;
        this.softwares = softwares;
        especializaciones = especializacion;
        this.idioma_targets = idioma_targets;
        this.idioma_sources = idioma_sources;
        this.idioma_maternos = idioma_maternos;
    }



    public int getLinguistaid() {
        return linguistaid;
    }



    public void setLinguistaid(int linguistaid) {
        this.linguistaid = linguistaid;
    }



    public String getNombre() {
        return nombre;
    }



    public void setNombre(String nombre) {
        this.nombre = nombre;
    }



    public String getApellido() {
        return apellido;
    }



    public void setApellido(String apellido) {
        this.apellido = apellido;
    }



    public String getMail() {
        return mail;
    }



    public void setMail(String mail) {
        this.mail = mail;
    }



    public String getPais() {
        return pais;
    }



    public void setPais(String pais) {
        this.pais = pais;
    }



    public String getExperiencia() {
        return experiencia;
    }



    public void setExperiencia(String experiencia) {
        this.experiencia = experiencia;
    }



    public String getPlataforma() {
        return plataforma;
    }



    public void setPlataforma(String plataforma) {
        this.plataforma = plataforma;
    }



    public String getLink() {
        return link;
    }



    public void setLink(String link) {
        this.link = link;
    }



    public Set<Servicio> getServicios() {
        return servicios;
    }



    public void setServicios(Set<Servicio> servicios) {
        this.servicios = servicios;
    }



    public Set<Software> getSoftwares() {
        return softwares;
    }



    public void setSoftwares(Set<Software> softwares) {
        this.softwares = softwares;
    }



    public Set<especializacion.Especializacion> getEspecializaciones() {
        return especializaciones;
    }



    public void setEspecializaciones(Set<especializacion.Especializacion> especializaciones) {
        this.especializaciones = especializaciones;
    }



    public Set<Idioma_target> getIdioma_targets() {
        return idioma_targets;
    }



    public void setIdioma_targets(Set<Idioma_target> idioma_targets) {
        this.idioma_targets = idioma_targets;
    }



    public Set<idioma_source.Idioma_source> getIdioma_sources() {
        return idioma_sources;
    }



    public void setIdioma_sources(Set<idioma_source.Idioma_source> idioma_sources) {
        this.idioma_sources = idioma_sources;
    }



    public Set<idioma_materno.Idioma_materno> getIdioma_maternos() {
        return idioma_maternos;
    }



    public void setIdioma_maternos(Set<idioma_materno.Idioma_materno> idioma_maternos) {
        this.idioma_maternos = idioma_maternos;
    }

    
}

下面是我为“Iligoma_materno”表定义代码的地方。这个类的结构与其他与Linguista类的多对多关系相同:

package idioma_materno;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import Linguista.Linguista;

@Entity
@Table(name="Idioma_materno")
public class Idioma_materno  implements Serializable{

    @Id
    @Column(name="IdiomaID")
    private int idiomaid;
    
    @Column(name="Idioma")
    private String idioma;
    
    @ManyToMany(mappedBy = "idioma_maternos")
    private Set<Linguista> linguistas= new HashSet<>();


    public Idioma_materno(int idiomaID, String idioma) {
        super();
        idiomaid = idiomaID;
        this.idioma = idioma;
    }

    public Idioma_materno() {
        super();
    }

    public int getIdiomaid() {
        return idiomaid;
    }

    public void setIdiomaid(int idiomaid) {
        this.idiomaid = idiomaid;
    }

    public String getIdioma() {
        return idioma;
    }

    public void setIdioma(String idioma) {
        this.idioma = idioma;
    }

    public Set<Linguista> getLinguistas() {
        return linguistas;
    }

    public void setLinguistas(Set<Linguista> linguistas) {
        this.linguistas = linguistas;
    }
    
    

    
}

以下是表idioma_materno的XML模式:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
   <class name = "idioma_materno.Idioma_materno" table = "Idioma_materno">
      
      <meta attribute = "class-description">
         This class contains the idioma source details. 
      </meta>
      
      <id name = "idiomaid" type = "int" column = "IdiomaID">
       
      </id>
      
      <property name = "idioma" column = "Idioma" type = "string"/>
      
      <set name="idioma_maternos" table="Linguista_Idioma_Materno" inverse="true" lazy="true" fetch="select">
          <key>
              <column name="IdiomaID" not-null="true" />
          </key>
          <many-to-many entity-name="Linguista.Linguista">
              <column name="LinguistaID" not-null="true" />
          </many-to-many>
      </set>

      
   </class>
</hibernate-mapping>

以下是“linguista”主类的XML sxhema:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
   <class name = "Linguista.Linguista" table = "Linguista">
      
      <meta attribute = "class-description">
         This class contains the Linguist details. 
      </meta>
      
      <id name = "linguistaid" type = "int" column = "LinguistaID">
       
      </id>
      
      <property name = "nombre" column = "nombre" type = "string"/>
      <property name = "apellido" column = "apellido" type = "string"/>
      <property name = "mail" column = "mail" type = "string"/>
      <property name = "pais" column = "pais" type = "string"/>
      <property name = "experiencia" column = "experiencia" type = "string"/>
      <property name = "plataforma" column = "plataforma" type = "string"/>
      <property name = "link" column = "link" type = "string"/>
     
      <set name="servicios" table="linguista_servicios" 
        inverse="false" lazy="true" fetch="select" cascade="all" >
          <key>
              <column name="LinguistaID" not-null="true" />
          </key>
          <many-to-many entity-name="servicios.Servicio">
              <column name="ServicioID" not-null="true" />
          </many-to-many>
      </set>
      
      <set name="softwares" table="linguista_software" 
        inverse="false" lazy="true" fetch="select" cascade="all" >
          <key>
              <column name="LinguistaID" not-null="true" />
          </key>
          <many-to-many entity-name="software.Software">
              <column name="SoftwareID" not-null="true" />
          </many-to-many>
      </set>
      
      <set name="especializaciones" table="linguista_especializacion" 
        inverse="false" lazy="true" fetch="select" cascade="all" >
          <key>
              <column name="LinguistaID" not-null="true" />
          </key>
          <many-to-many entity-name="especializacion.Especializacion">
              <column name="EspecializacionID" not-null="true" />
          </many-to-many>
      </set> 
 
       <set name="idioma_targets" table="linguista_idioma_target" 
        inverse="false" lazy="true" fetch="select" cascade="all" >
          <key>
              <column name="LinguistaID" not-null="true" />
          </key>
          <many-to-many entity-name="idioma_target.Idioma_target">
              <column name="IdiomaID" not-null="true" />
          </many-to-many>
      </set> 
 
     <set name="idioma_sources" table="linguista_idioma_source" 
        inverse="false" lazy="true" fetch="select" cascade="all" >
          <key>
              <column name="LinguistaID" not-null="true" />
          </key>
          <many-to-many entity-name="idioma_source.Idioma_source">
              <column name="IdiomaID" not-null="true" />
          </many-to-many>
      </set> 
      
     <set name="idioma_maternos" table="linguista_idioma_materno" 
        inverse="false" lazy="true" fetch="select" cascade="all" >
          <key>
              <column name="LinguistaID" not-null="true" />
          </key>
          <many-to-many entity-name="idioma_materno.Idioma_materno">
              <column name="IdiomaID" not-null="true" />
          </many-to-many>
      </set> 
 
 
 
   </class>
</hibernate-mapping>

我试着检查所有的大写字母(第一个字符是getter中的大写字母,等等)方法之一,但不起作用

谢谢你的帮助


共 (0) 个答案