hibernate 映射异常

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,运行,异常解决。

你可能感兴趣的:(java,Hibernate,mysql,servlet)