我遇到了这个错误:
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这里是主体。客户端
public class Cliente {
private String name;
public Cliente(String name) {
this.name= name;
}
}
编辑2删除了一堆无用的代码,让它看起来更干净
4条答案
按热度按时间nfzehxib1#
我可以说,
principal.Cliente
中缺少默认构造函数,o75abkj42#
添加更多构造函数时,请确保保留默认构造函数。
piah890a3#
请注意,在Spring Boot中,您应该为您拥有的模型至少有2个构造函数。
1.构造函数为空(无参数:在Java术语中称为“默认构造函数”)
公共客户端(){}
1.带有所有字段的构造函数,减去id。
1.(兼职)包含所有字段的构造函数,ID包含在内。
您应该在模型中包含前两个构造函数。如果删除第一个构造函数,它会显示您报告的错误。第二个构造函数由hybernate用来生成一个示例并将其保存在数据库的表中。ID是自动生成的。第三个构造器,它对你用模拟数据进行测试很有用。
dnph8jn44#
在Spring Boot中消除此错误的最简单方法是使用@NoArgsConstructor注解。为此,您需要依赖Lombok。我总是建议在 Spring 启动项目中使用Lombok。那么您的实体类将如下所示