<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是外键。
解决方案 »
- IE 火狐event 问题 ~!!!
- Hibernate更新问题??!?!
- filter问题?doFilter中,chain.doFilter(req, resp);之后写的代码,不是让拦截的请求完成后再执行的吗?
- 谁知道163和yahoo油箱的接口啊?
- HTML 文件与servlet 的整合问题
- [救命!!]这个XML怎样写成带有template的xslt??
- 连接数据源出现的问题(两天了还没搞定,着急ing)?
- 为什么每次开发EJB,编译时都有这样的警告信息,weblogic也显示错误信息但可以布署?
- 已经看了《JAVA2 HOW TO PROGRAM》,学J2EE,应该看什么书??
- <c:forEach>中实体返回后台
- 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