org.hibernate.InstantiationException:没有实体的默认构造函数:: principal.Cliente [英] org.hibernate.InstantiationException: No default constructor for entity: : principal.Cliente

查看:103
本文介绍了org.hibernate.InstantiationException:没有实体的默认构造函数:: principal.Cliente的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 线程main中的异常org.hibernate.InstantiationException:没有默认构造函数entity::principal.Cliente 
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:120)
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:136)$ b在org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:737)
$ b在org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:4755)
。在组织.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1387)
at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1375)
at org.hibernate.loader.plan.exec .process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:235)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:107)
在在org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails $ EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:255)
(ResultSetProcessorImpl。 Java的:在org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader在org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad 129)
(AbstractLoadPlanBasedLoader.java:138)
。 executeLoad(AbstractLoadPlanBasedLoader.java:102)
在org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
在org.hibernate.persister.entity.AbstractEntityPersister.load( AbstractEntityPersister.java:4120)
在org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:502)
在org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java: 467)在org.hiberna
te.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:212)
处org.hibernate.event org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:274)
。 internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
在org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1066)
在org.hibernate.internal.SessionImpl.access $ 2000(SessionImpl .java:176)
at org.hibernate.internal.SessionImpl $ IdentifierLoadAccessImpl.load(SessionImpl.java:2540)
at org.hibernate.internal.SessionImpl.get(SessionImpl.java:951)$ b.b at principal.ClienteDAO.obtenContacto(ClienteDAO.java:83)
at principal.main.main(Main.java:43)

不知道为什么即将发生该异常



正在运行 main

  public static void main(String [] args){

int idAEliminar = 2;
ClienteDAO clienteDAO = new ClienteDAO();
GenericDAO genericDAO = new GenericDAO();
Cliente contactoRecuperado;

/ / Contacto(String nombre,String direccion,int codigoPostal,String telefono,String cuit)
Cliente cliente1 = new Cliente(Pedro,dr clark 385 ,3260,86484,15531);
Cliente cliente2 =新客户(Manuel,克拉克博士385,3260,86484,15531);
Cliente cliente3 =新客户(Martin,克拉克博士385,3260,86484,15531);
Cliente cliente4 =新客户(Josecito,克拉克博士385,3260,86484,15531);

// Guardamos las tres instancias,guardamos el id del contacto1 para usarlo posteriormente
idAEliminar = clienteDAO.guardaCliente(cliente1);
clienteDAO.guardaCliente(cliente2);
clienteDAO.guardaCliente(cliente3);

// Modificamos el contacto 2 y lo actualizamos
cliente2.setNombre(Nuevo Contcto 2);
clienteDAO.actualizaCliente(cliente2);
//genericDAO.save(cliente4);
// Recuperamos el contacto1 de la base de datos
// contactoRecuperado = genericDAO.get(Cliente.class,idAEliminar);
contactoRecuperado = clienteDAO.obtenContacto(idAEliminar);
System.out.println(Recuperamos a+ contactoRecuperado.getNombre());

并且这是我的 classDAO

  public class ClienteDAO {
private session session;
私人交易tx;

public int guardaCliente(Cliente cliente)throws HibernateException
{
int id = 0;

尝试
{
iniciaOperacion();
id =(int)session.save(cliente);
tx.commit();
} catch(HibernateException he)
{
manejaExcepcion(he);
扔他;
} finally
{
session.close();
}

return id;

$ b public void actualizaCliente(Cliente cliente)throws HibernateException
{
try
{
iniciaOperacion();
session.update(cliente);
tx.commit();
} catch(HibernateException he)
{
manejaExcepcion(he);
扔他;
} finally
{
session.close();


$ b $ public void eliminaCliente(Cliente cliente)throws HibernateException
{
try
{
iniciaOperacion();
session.delete(cliente);
tx.commit();
} catch(HibernateException he)
{
manejaExcepcion(he);
扔他;
} finally
{
session.close();



public Cliente obtenContacto(int codCliente)throws HibernateException
{
Cliente cliente = null;
尝试
{
iniciaOperacion();
cliente =(Cliente)session.get(Cliente.class,codCliente);
} finally
{
session.close();
}

return cliente;
}

公共列表< Cliente> obtenListaContactos()抛出HibernateException
{
List< Cliente> listaContactos = null;

尝试
{
iniciaOperacion();
listaContactos = session.createQuery(from Contacto)。list();
} finally
{
session.close();
}

return listaContactos;

$ b $ private void iniciaOperacion()throws HibernateException
{
session = HibernateUtil.getSessionFactory()。openSession();
tx = session.beginTransaction();

$ b private private manejaExcepcion(HibernateException he)throws HibernateException
{
tx.rollback();
抛出新的HibernateException(Ocurrióun error en la capa de acceso a datos,他);


$ / code $ / pre

当我保存,更新并消除它时,所以我不知道我做什么错了



EDIT1
这里是principal.Cliente

  public class Cliente {
private String nombre,direccion,telefono,cuit;
private int codigo,codigoPostal;
私人双人沙发,杜达;

public Cliente(String nombre,String direccion,int codigoPostal,String telefono,String cuit){
this.nombre = nombre;
this.direccion = direccion;
this.codigoPostal = codigoPostal;
this.telefono = telefono;
this.cuit = cuit;
this.saldo = 0;
this.deuda = 0;
}




public String getNombre(){
return nombre;
}

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

public String getDireccion(){
return direccion;
}

public void setDireccion(String direccion){
this.direccion = direccion;
}

public int getCodigoPostal(){
return codigoPostal;
}

public void setCodigoPostal(int codigoPostal){
this.codigoPostal = codigoPostal;
}

public String getTelefono(){
return telefono;
}

public void setTelefono(String telefono){
this.telefono = telefono;
}

public String getCuit(){
return cuit;
}

public void setCuit(String cuit){
this.cuit = cuit;
}

public int getCodigo(){
return codigo;
}

private void setCodigo(int codigo){
this.codigo = codigo;
}

public double getSaldo(){
return saldo;
}

public void setSaldo(double saldo){
this.saldo = saldo;
}

public double getDeuda(){
return deuda;
}

public void setDeuda(double deuda){
this.deuda = deuda;
}



}


解决方案

缺少 principal.Cliente中的默认构造函数我可以说,

 public class Cliente {
public Cliente(){}
}


I'm having this error:

Exception in thread "main" org.hibernate.InstantiationException: No default constructor for entity:  : principal.Cliente
   at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:120)
   at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:136)
   at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:737)
   at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:4755)
   at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1387)
   at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1375)
   at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:235)
   at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:107)
   at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:255)
   at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:129)
   at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138)
   at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102)
   at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:186)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4120)
   at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:502)
   at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:467)
   at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:212)
   at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:274)
   at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150)
   at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1066)
   at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:176)
   at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2540)
   at org.hibernate.internal.SessionImpl.get(SessionImpl.java:951)
   at principal.ClienteDAO.obtenContacto(ClienteDAO.java:83)
   at principal.Main.main(Main.java:43)

Have no idea why im getting that exception

im running main

public static void main(String[] args) {

    int idAEliminar = 2;
    ClienteDAO clienteDAO = new ClienteDAO(); 
    GenericDAO genericDAO = new GenericDAO();
    Cliente contactoRecuperado;

    //Creamos tes instancias de Contacto  (String nombre, String direccion, int codigoPostal, String telefono, String cuit)
    Cliente cliente1 = new Cliente("Pedro", "dr clark 385", 3260, "86484","15531"); 
    Cliente cliente2 = new Cliente("Manuel", "dr clark 385", 3260, "86484","15531"); 
    Cliente cliente3 = new Cliente("Martin", "dr clark 385", 3260, "86484","15531");
    Cliente cliente4 = new Cliente("Josecito", "dr clark 385", 3260, "86484","15531");

    //Guardamos las tres instancias, guardamos el id del contacto1 para usarlo posteriormente 
    idAEliminar = clienteDAO.guardaCliente(cliente1); 
    clienteDAO.guardaCliente(cliente2);
    clienteDAO.guardaCliente(cliente3);

    //Modificamos el contacto 2 y lo actualizamos         
    cliente2.setNombre("Nuevo Contcto 2");
    clienteDAO.actualizaCliente(cliente2);
    //genericDAO.save(cliente4);
    //Recuperamos el contacto1 de la base de datos 
    //contactoRecuperado = genericDAO.get(Cliente.class, idAEliminar);
    contactoRecuperado = clienteDAO.obtenContacto(idAEliminar);
    System.out.println("Recuperamos a " + contactoRecuperado.getNombre());

and this it my classDAO

public class ClienteDAO {  
private Session session; 
private Transaction tx;  

public int guardaCliente(Cliente cliente) throws HibernateException 
{ 
    int id = 0;  

    try 
    { 
        iniciaOperacion(); 
        id = (int) session.save(cliente); 
        tx.commit(); 
    } catch (HibernateException he) 
    { 
        manejaExcepcion(he); 
        throw he; 
    } finally 
    { 
        session.close(); 
    }  

    return id; 
}  

public void actualizaCliente(Cliente cliente) throws HibernateException 
{ 
    try 
    { 
        iniciaOperacion(); 
        session.update(cliente); 
        tx.commit(); 
    } catch (HibernateException he) 
    { 
        manejaExcepcion(he); 
        throw he; 
    } finally 
    { 
        session.close(); 
    } 
}  

public void eliminaCliente (Cliente cliente) throws HibernateException 
{ 
    try 
    { 
        iniciaOperacion(); 
        session.delete(cliente); 
        tx.commit(); 
    } catch (HibernateException he) 
    { 
        manejaExcepcion(he); 
        throw he; 
    } finally 
    { 
        session.close(); 
    } 
}  

public Cliente obtenContacto(int codCliente) throws HibernateException 
{ 
   Cliente cliente = null;  
    try 
    { 
        iniciaOperacion(); 
        cliente = (Cliente) session.get(Cliente.class, codCliente); 
    } finally 
    { 
        session.close(); 
    }  

    return cliente; 
}  

public List<Cliente> obtenListaContactos() throws HibernateException 
{ 
    List<Cliente> listaContactos = null;  

    try 
    { 
        iniciaOperacion(); 
        listaContactos = session.createQuery("from Contacto").list(); 
    } finally 
    { 
        session.close(); 
    }  

    return listaContactos; 
}  

private void iniciaOperacion() throws HibernateException 
{ 
    session = HibernateUtil.getSessionFactory().openSession(); 
    tx = session.beginTransaction(); 
}  

private void manejaExcepcion(HibernateException he) throws HibernateException 
{ 
    tx.rollback(); 
    throw new HibernateException("Ocurrió un error en la capa de acceso a datos", he); 
} 
}

When i save, update and eliminate it works perfectly, so i dont know what im doing wrong

EDIT1 here is principal.Cliente

public class Cliente {
private String nombre, direccion, telefono, cuit;
private int codigo, codigoPostal;
private double saldo, deuda;

public Cliente(String nombre, String direccion, int codigoPostal, String telefono, String cuit) {
    this.nombre = nombre;
    this.direccion = direccion;
    this.codigoPostal = codigoPostal;
    this.telefono = telefono;
    this.cuit = cuit;
    this.saldo = 0;
    this.deuda = 0;
}




public String getNombre() {
    return nombre;
}

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

public String getDireccion() {
    return direccion;
}

public void setDireccion(String direccion) {
    this.direccion = direccion;
}

public int getCodigoPostal() {
    return codigoPostal;
}

public void setCodigoPostal(int codigoPostal) {
    this.codigoPostal = codigoPostal;
}

public String getTelefono() {
    return telefono;
}

public void setTelefono(String telefono) {
    this.telefono = telefono;
}

public String getCuit() {
    return cuit;
}

public void setCuit(String cuit) {
    this.cuit = cuit;
}

public int getCodigo() {
    return codigo;
}

private void setCodigo(int codigo) {
    this.codigo = codigo;
}

public double getSaldo() {
    return saldo;
}

public void setSaldo(double saldo) {
    this.saldo = saldo;
}

public double getDeuda() {
    return deuda;
}

public void setDeuda(double deuda) {
    this.deuda = deuda;
}



}

解决方案

Missing default constructor in principal.Cliente I can say,

public class Cliente{ 
  public Cliente(){}
}

这篇关于org.hibernate.InstantiationException:没有实体的默认构造函数:: principal.Cliente的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆