本文介绍了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
EDIT1here 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!