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) 个答案