mysql数据库表中的一个字段是tinyint的,映射后成为byte型,手工改成boolean型后所有跟这个表相关的操作全都抛出异常
严重: Servlet.service() for servlet action threw exception
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of com.domain.Term.setOnline
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValuesWithOptimizer(PojoEntityTuplizer.java:215)
at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:185)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3232)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:129)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
.................
显然是属性映射的问题,分析后查找资料,发现
出错或异常原因:
1. 数据库表中的字段(一般都是数值型的字段)的类型与配置文件中所配置的类型不一致。
2. 在数据库中,数值型字段的值为空null。
相应的解决:
1. 将该字段在配置文件中的类型修改成一致的类型都为Integer。
2. 因为null不能赋值给原始类型,所以在配置数据库中数值型的字段类型(long、int、tinyint)都映射成对象类型Integer问题就解决了。
数据库中已有数据,打开数据库,发现这列为null,改为1,运行,异常解决。