org.hibernate.InstantiationException: No default constructor for entity: : principal.Cliente

Viewed 108684

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

EDIT1 here is principal.Cliente

public class Cliente {
    private String name;

    public Cliente(String name) {
        this.name= name;
    }
}

EDIT 2 removed a bunch of useless code to make it look cleaner

4 Answers

when you are adding more constructors, make sure to keep the default one.

public Cliente(){
   super()
}

Notice, in spring boot you should have at least 2 constructors for the models you have.

  1. Constructor empty (no arguments: this is called "default constructor" in java terminology)

    public Cliente(){}

  2. Constructor with all the fields, minus the id.

  3. (facultative) Constructor with all the fields, id included.

You should include the first 2 Constructors in your model. If you remove the first constructor it gives you the error you reported. The 2nd constructor is used by hybernate to generate an instance and save it on the table of the db. The id is generated automatically. The 3rd constructor it is useful for you for making tests with mock data.

The easiest way to get rid of this error in spring boot is to use the @NoArgsConstructor annotation. For this you will need lombok dependency.I always recommend to use lombok in spring boot projects. Then your entity class will be as follows

import lombok.NoArgsConstructor;

    @Entity
    @NoArgsConstructor
    public class Cliente{ 
      
    }
Related