当前位置: 首页 > 面试题库 >

org.hibernate.InstantiationException:没有用于实体的默认构造函数:principal.Cliente

公孙驰
2023-03-14
问题内容

我遇到这个错误:

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)

不知道为什么我得到那个例外

进出口运行

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());

这是我的

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); 
} 
}

当我保存,更新和删除它时,它可以正常工作,所以我不知道我在做什么错

EDIT1 在这里是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;
}



}

问题答案:

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

public class Cliente{ 
  public Cliente(){}
}


 类似资料:
  • 问题内容: 我遇到这个错误: 不知道为什么我得到那个例外 我正在运行 主要 这是我的 课 当我保存,更新和删除它时,它可以正常工作,所以我不知道我在做什么错 EDIT1 在这里是principal.Cliente 问题答案: 我可以说缺少默认构造函数,

  • 问题内容: 我试图保留JAXB生成的对象。这是示例结构: 下面是类的结构: 现在,该类具有一个参数构造函数,它接受一个String。我想将该字符串作为整个记录的一部分保留在数据库中。我看到了 org.hibernate.InstantiationException:实体的默认构造函数:RecipientDetailsList 尝试保存对象时发生异常。我有两个问题: 我们是否有任何例外处理方法?我无

  • 问题内容: 我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要)。他们将不得不为某些类创建构造函数,并为其添加一些方法。稍后,使用我提供的测试功能,他们将检查是否正常。 我想做的是 通过反思 创建一个我想测试的类的新实例。问题在于,有时 没有默认构造函数 。我不在乎, 我想创建一个实例并自己初始化实例变量 。有什么办法吗?很抱歉,如果以前已经有人问过这个问题,但我找不到任何答

  • 问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题

  • 问题内容: 我正在尝试使用Jackson来向Json读/写我的POJO。截至目前,我已经为我的班级进行了配置和工作,但第3方班级除外。尝试读取Json时出现错误: 在Google进行几次快速搜索后,看来我的课程需要默认的构造函数或使用注释覆盖默认的构造函数。不幸的是,失败的类来自第3方库,该类没有默认的构造函数,我显然不能覆盖代码。 所以我的问题是,对此我能做些什么吗?还是我不走运? 谢谢。 问题

  • 问题内容: 默认构造函数到底是什么?你能告诉我以下哪个是默认构造函数,它与其他构造函数有何不同? 问题答案: 他们都不是。如果定义,则不是默认值。 除非你定义另一个构造函数,否则默认构造函数是自动生成的无参数构造函数。任何未初始化的字段都将设置为其默认值。对于你的榜样,它看起来像这样假设的类型String,int以及int,那类本身是公共的: 这与 完全没有构造函数。但是,如果定义至少一个构造函数