org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleT

写一段测试的代码,使用Hibernate读取一行数据时,报错Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister

网上查了一下,有几种情况:

  • JAR未引入
  • 实体类中缺少无参构造函数
  • 其他原因
当时只顾着查这个报错信息,排除了这些情况,发现还是没有好转。后来发现是bean类和自动生成的hbm.xml里的属性映射不对,修改后就可以正常运行了。

坑点有二:
  • 之前老项目的开发人员不太注重规范,bean类里type属性映射到数据表里的date字段之类的问题时有出现(对,他们date也是用varchar来存),这个项目延用了之前的bean类,不留神就中枪(论开发规范的重要性)
  • 报错信息要看完,要找到报错信息里关键的部分
这里重现一下当时的错误,不完全一致,仅供记录和参考。

org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
	at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:185)
	at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:386)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744)
	at util.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:34)
	at dao.impl.BaseDaoImpl.<init>(BaseDaoImpl.java:15)
	at dao.impl.ProcessInfoDaoImpl.<init>(ProcessInfoDaoImpl.java:6)
	at test.ProcessInfoDBTest.main(ProcessInfoDBTest.java:15)
Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
	at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:138)
	at org.hibernate.tuple.entity.EntityTuplizerFactory.constructDefaultTuplizer(EntityTuplizerFactory.java:188)
	at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:341)
	at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:505)
	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:144)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163)
	... 7 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
	at org.hibernate.tuple.entity.EntityTuplizerFactory.constructTuplizer(EntityTuplizerFactory.java:135)
	... 16 more
Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for inceptType in class bean.ProcessInfo
	at org.hibernate.property.BasicPropertyAccessor.createGetter(BasicPropertyAccessor.java:316)
	at org.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAccessor.java:310)
	at org.hibernate.mapping.Property.getGetter(Property.java:320)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEntityTuplizer.java:436)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:200)
	at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:82)
	... 21 more
Exception in thread "main" java.lang.NullPointerException
	at dao.impl.BaseDaoImpl.getSession(BaseDaoImpl.java:24)
	at dao.impl.BaseDaoImpl.findById(BaseDaoImpl.java:38)
	at service.impl.BaseServiceImpl.findById(BaseServiceImpl.java:24)
	at test.ProcessInfoDBTest.main(ProcessInfoDBTest.java:16)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值