本帖最后由 java2000_net 于 2008-08-04 20:12:07 编辑

解决方案 »

  1.   

    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,字段就是上面几个
      

  2.   

    <set name="emails" table="EMAIL"> 
    <key column="ID"> </key> 
    <composite-element class="Email"> 
      <property name="email" column="EMAIL" type="string"> </property> 
    </composite-element> 
    </set> 这些配置是你自己写的?表的结构是什么样的?
      

  3.   

    Caused by: java.lang.ClassCastException: java.lang.String 
    应该是类型转换出的问题吧
      

  4.   

    两个表:
    component:
     id
    uename 
    password
    email:id
    email
      

  5.   

    这一段改为
    <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>
      

  6.   

    你那个是使用的集合映射方式;
    和我这个是一个道理的,我另一个项目就是这样写的,
    而这个例子不是的,它是使用component 集合映射方式,与上面只是配置文件的区别,思想是一样的;而对于这个错误,应该是类型不一样,但我检查过了,数据库中的字段,bean中的属性,type都是对的,不像网上说的,类型不配;
      

  7.   


    不好意思,多了个</composite-element> 应为
    <set name="emails" table="EMAIL"> 
    <key column="id"> </key> 
    <one-to-many class="Email"/>
    </set>
      

  8.   

    LZ的这个不适合做component 映射
      

  9.   

    解决了,谢谢各位的帮忙:问题是:我把Component.java对象中写的一个
    public void addEmail(Email email) {
    this.emails.add(email);
    }
    写成了string 类型,而此时它使用component映射,操作的已经是Email对象了,应该向Component对象中传入的是Email对象,不是String类型;
    这就是组件集合映射的一个问题,它和set,list,map集合映射不一样,它们可以直接操作的就是类型;组件就是组件,不是类型,而是对象;
      

  10.   


    你的Component.java不是POJO类吗?
    怎么有红色的这种方法在这个类里?