<one-to-many class="com.persistent.AddressFour"/>说明peoplefour和addressfour是1对多的关系。所以在AddressFour.hbm.xml 里要有个many-to-one元素的吧。<many-to-one name="" class="包名。类名" column=""
      insert="false" update="false">
</many-to-one>name是什么我忘记了,好像是随便起的逻辑名,class是所对应的表的polo类的名字,column是外键。

解决方案 »

  1.   

       按照你的意思,是映射了peopelfour和addressfour的双向关联,我试了一下,仍然报同样的错误:
    org.hibernate.MappingException: Repeated column in mapping for entity: com.persistent.AddressFour column: addressId (should be mapped with insert="false" update="false")    并不一定非要定义双向关联,我定义的是单向关联,这问题不大。问题在于,利用map定义映射,需要指定它的<map-key/>,在我这里我指定addressfour表的主键addressId作为这个key:
         
         <map name="addresses" cascade="all" lazy="false">
            <key column="peopleId" not-null="true" />
            <map-key column="addressId" type="integer"></map-key>
            <one-to-many class="com.persistent.AddressFour"/>
         </map>   
       结果报上面的错误,我就不理解了。
      

  2.   

    <map name="addresses" cascade="all" lazy="false">
            <key column="peopleId"/> 
            <one-to-many class="com.persistent.AddressFour"/>
         </map>
      

  3.   

       三楼兄弟的不对,不符合DTD文档规范,报下面的错误,红线部分必须要有一个:org.xml.sax.SAXParseException: 
    The content of element type "map" must match 
    "(meta*,subselect?,cache?,synchronize*,comment?,
    key,(map-key|composite-map-key|map-key-many-to-many|index|composite-index|index-many-to-many|index-many-to-any),
    (element|one-to-many|many-to-many|composite-element|many-to-any),
    loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
      

  4.   

    看你抱的错  <map-key column="addressId" type="integer" insert="false" update="false"></map-key>
    里边是不是要定义insert="false" update="false" 这2个属性呢?
      

  5.   

       
      我用的是hibernate-mapping-3.0.dtd,定义了insert="false" update="false" 这2个属性还是报错
      

  6.   

     <map-key column="addressId" type="integer"></map-key>会不会是在people表里面addressId列是不可知的呢?
      

  7.   

        按照8楼兄弟的说法,如果addressId对people表来说是不可知的,那么codeNumber对people表来说同样也是不可知的,于是,我用codeNumber做键,
    修改映射为:
         
    <hibernate-mapping  default-lazy="false">  
       <class name="com.persistent.PeopleFour" table="people">     
         <id name="id" column="peopleId" unsaved-value="null">    
            <generator class="increment">        
            </generator>    
         </id>     
         <property name="name" column="name"></property>     
         <map name="addresses" cascade="all">
            <key column="peopleId" not-null="true" />
            <map-key type="string" column="codeNumber" insert="false" update="false"></map-key>
            <one-to-many class="com.persistent.AddressFour"/>
         </map>     
       </class>
    </hibernate-mapping>    实际结果是,如果不加上insert="false"、update="false">的限制,那么会报错;加上之后却可以正常运行,所以不存在可知不可知的问题。会不会
    是因为addressId是address表的主键的缘故?因为我不可以对主键加上insert="false"、update="false">的限制。     这样就又冒出一个问题出来了,那就是:为什么非要加上insert="false"、update="false">的限制呢?因为加上这个限制我仍然可以对codeNumber
    进行插入、修改操作。
      

  8.   

    <class name="com.persistent.PeopleFour" table="people">     
         <id name="id" column="peopleId" unsaved-value="null">    
            <generator class="increment">        
            </generator>    
         </id>     
         <property name="name" column="name"></property>     
         <map name="addresses" cascade="all" lazy="false">
            <key column="peopleId" not-null="true" />
            <index column="addressId" type="integer" />
            <one-to-many class="com.persistent.AddressFour"/>
         </map>     
    </class>
    用红色部分的index看看行不行。我看书上的例子是用 index 的。
      

  9.   

       还是不行啊,报错:
    org.hibernate.MappingException: Repeated column in mapping for entity: com.persistent.AddressFour column: addressId (should be mapped with insert="false" update="false")
    at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:575)
    at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:597)
    at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:615)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:405)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:984)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1169)
    at com.hibernate.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
    at com.wuyun.TestFour.getAllPeoples(TestFour.java:25)
    at com.wuyun.TestFour.main(TestFour.java:19)
    %%%% Error Creating SessionFactory %%%%
    org.hibernate.MappingException: Could not read mappings from resource: com/persistent/PeopleFour.hbm.xml
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:485)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1310)
    at com.hibernate.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:69)
    at com.hibernate.HibernateSessionFactory.getSession(HibernateSessionFactory.java:53)
    at com.wuyun.TestFour.getAllPeoples(TestFour.java:25)
    at com.wuyun.TestFour.main(TestFour.java:19)
    Caused by: org.hibernate.DuplicateMappingException: Duplicate collection role mapping com.persistent.PeopleFour.addresses
    at org.hibernate.cfg.Mappings.addCollection(Mappings.java:124)
    at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2030)
    at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2005)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:368)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:282)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:153)
    at org.hibernate.cfg.Configuration.add(Configuration.java:386)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:427)
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)
    ... 9 more