log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. org.hibernate.PropertyAccessException: exception getting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) getter of com.hejianjiao.vo.Email.? at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:89) at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:307) at org.hibernate.type.ComponentType.deepCopy(ComponentType.java:346) at org.hibernate.collection.PersistentSet.getSnapshot(PersistentSet.java:42) at org.hibernate.engine.CollectionEntry.<init>(CollectionEntry.java:68) at org.hibernate.engine.StatefulPersistenceContext.addCollection(StatefulPersistenceContext.java:695) at org.hibernate.engine.StatefulPersistenceContext.addNewCollection(StatefulPersistenceContext.java:670) at org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:85) at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:51) at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101) at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:98) at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55) at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:333) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:250) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:114) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514) at com.hejianjiao.test.TestDemo01.main(TestDemo01.java:34) Caused by: java.lang.ClassCastException: java.lang.String at com.hejianjiao.vo.Email$$BulkBeanByCGLIB$$c41e01b6.getPropertyValues(<generated>) at net.sf.cglib.beans.BulkBean.getPropertyValues(BulkBean.java:48) at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86) ... 24 more 其中就只有两个类,一个Component 一个Email,每个类只是POJO,字段就是上面几个
log4j:WARN Please initialize the log4j system properly.
org.hibernate.PropertyAccessException: exception getting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) getter of com.hejianjiao.vo.Email.?
at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:89)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:307)
at org.hibernate.type.ComponentType.deepCopy(ComponentType.java:346)
at org.hibernate.collection.PersistentSet.getSnapshot(PersistentSet.java:42)
at org.hibernate.engine.CollectionEntry.<init>(CollectionEntry.java:68)
at org.hibernate.engine.StatefulPersistenceContext.addCollection(StatefulPersistenceContext.java:695)
at org.hibernate.engine.StatefulPersistenceContext.addNewCollection(StatefulPersistenceContext.java:670)
at org.hibernate.event.def.WrapVisitor.processArrayOrNewCollection(WrapVisitor.java:85)
at org.hibernate.event.def.WrapVisitor.processCollection(WrapVisitor.java:51)
at org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:101)
at org.hibernate.event.def.WrapVisitor.processValue(WrapVisitor.java:98)
at org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:55)
at org.hibernate.event.def.AbstractSaveEventListener.visitCollectionsBeforeSave(AbstractSaveEventListener.java:333)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:114)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
at com.hejianjiao.test.TestDemo01.main(TestDemo01.java:34)
Caused by: java.lang.ClassCastException: java.lang.String
at com.hejianjiao.vo.Email$$BulkBeanByCGLIB$$c41e01b6.getPropertyValues(<generated>)
at net.sf.cglib.beans.BulkBean.getPropertyValues(BulkBean.java:48)
at org.hibernate.tuple.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:86)
... 24 more
其中就只有两个类,一个Component 一个Email,每个类只是POJO,字段就是上面几个
<key column="ID"> </key>
<composite-element class="Email">
<property name="email" column="EMAIL" type="string"> </property>
</composite-element>
</set> 这些配置是你自己写的?表的结构是什么样的?
应该是类型转换出的问题吧
component:
id
uename
password
email:id
email
<set name="emails" table="EMAIL">
<key column="id"> </key>
<one-to-many class="Email"/>
</composite-element>
</set>另外,还需要配置Email.hbm.xml文件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~或者这样,不使用Email的类
<set name="emails" table="EMAIL">
<key column="id"/>
<element type="string" column="Email"/>
</set>
和我这个是一个道理的,我另一个项目就是这样写的,
而这个例子不是的,它是使用component 集合映射方式,与上面只是配置文件的区别,思想是一样的;而对于这个错误,应该是类型不一样,但我检查过了,数据库中的字段,bean中的属性,type都是对的,不像网上说的,类型不配;
不好意思,多了个</composite-element> 应为
<set name="emails" table="EMAIL">
<key column="id"> </key>
<one-to-many class="Email"/>
</set>
public void addEmail(Email email) {
this.emails.add(email);
}
写成了string 类型,而此时它使用component映射,操作的已经是Email对象了,应该向Component对象中传入的是Email对象,不是String类型;
这就是组件集合映射的一个问题,它和set,list,map集合映射不一样,它们可以直接操作的就是类型;组件就是组件,不是类型,而是对象;
你的Component.java不是POJO类吗?
怎么有红色的这种方法在这个类里?