<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是外键。
insert="false" update="false">
</many-to-one>name是什么我忘记了,好像是随便起的逻辑名,class是所对应的表的polo类的名字,column是外键。
解决方案 »
- jsp跳转到servlet找路径问题
- struts2.18怎么启动不了呢?Unable to load configuration. - action
- SPRING+HIBERNATE初始化加载错误
- apache+tomcat整合问题?
- struts标签下拉列表问题
- 100分紧急求助!
- ireport 怎么在一个报表里面统计两个数据库表?
- 用过struts DynaValidatorForm的请帮帮我!!
- weblogic 6.1与jbuilder 8.0下,在编了一个sessionbean后编译出现下列错误
- j2ee ejbLoad?
- Hibernate用户自定义值类型怎么用
- 上传附件大小问题
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>
结果报上面的错误,我就不理解了。
<key column="peopleId"/>
<one-to-many class="com.persistent.AddressFour"/>
</map>
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*)".
里边是不是要定义insert="false" update="false" 这2个属性呢?
我用的是hibernate-mapping-3.0.dtd,定义了insert="false" update="false" 这2个属性还是报错
修改映射为:
<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
进行插入、修改操作。
<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 的。
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