【问题标题】:org.hibernate.InstantiationException: No default constructor for entity: : principal.Clienteorg.hibernate.InstantiationException:没有实体的默认构造函数::principal.Cliente
【发布时间】:2017-10-20 15:57:24
【问题描述】:

我遇到了这个错误:

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)

不知道为什么我得到那个异常

EDIT1 这里是principal.Cliente

public class Cliente {
    private String name;

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

编辑 2 删除了一堆无用的代码,让它看起来更干净

【问题讨论】:

  • 你能发帖principal.Cliente类吗?您需要在 principal.Cliente 类中定义无 arg 构造函数。

标签: java mysql hibernate


【解决方案1】:

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

public class Cliente{ 
  public Cliente(){}
}

【讨论】:

  • 为什么实际使用的是默认构造函数?
  • @Arpit Aggarwal 为什么我们需要默认构造函数?
  • @KasunSiyambalapitiya stackoverflow.com/questions/25452018/… 我发现这个链接很有用。我也有同样的问题。
  • @shikhasingh - Hibernate 使用默认构造函数来创建实体对象。如果默认构造函数在任何实体中不可用,则 InstantiationException: There was an unexpected error (type=Internal Server Error, status=500)。将从休眠状态中抛出。
  • 太棒了,感谢我的国王 - 它在这里工作。
【解决方案2】:

当您添加更多构造函数时,请确保保留默认构造函数。

public Cliente(){
   super()
}

【讨论】:

    【解决方案3】:

    在 Spring Boot 中摆脱此错误的最简单方法是使用 @NoArgsConstructor 注解。为此,您将需要 lombok 依赖项。我始终建议在 spring boot 项目中使用 lombok。那么你的实体类会如下

    import lombok.NoArgsConstructor;
    
        @Entity
        @NoArgsConstructor
        public class Cliente{ 
          
        }
    

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 1970-01-01
      • 2019-08-08
      • 2020-02-07
      • 1970-01-01
      • 2014-10-16
      • 2015-03-19
      • 2023-03-20
      相关资源
      最近更新 更多