首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

org.hibernate.id.IdentifierGenerationException: attempted to assign id

2011-11-25 
在Hibernate中,一对一关系与多对多关系共存的时候是否会出现冲突?HBMorder:class namecom.model.Card

在Hibernate中,一对一关系与多对多关系共存的时候是否会出现冲突?
HBM
order:
<class name="com.model.Card" table="card">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="foreign">
<param name="property">users</param>
</generator>
</id>
<property name="cardName" type="java.lang.String"
column="cardNum" />
<one-to-one name="users" class="com.model.Users" />
</class>

user:
<one-to-one name="card" class="com.model.Card" cascade="all" />


然后就是在user中有一个多对多的关系
<set name="userrole" table="userole" cascade="save-update"
inverse="false">
<key>
<column name="uid"></column>
</key>
<composite-element class="com.model.Roleuser">
<parent name="us" />
<many-to-one name="rol" column="oid"
class="com.model.Roles" />
</composite-element>
</set>

现在运行一对一的关系运行是没有问题的
假如把user中的一对一的关系注释了,运行多对多的关系也是没有问题的,可是把一对一的关系拿出来,就不行了,提示有错误,如下:
Exception in thread "main" org.hibernate.id.IdentifierGenerationException: attempted to assign id from null one-to-one property: users
at org.hibernate.id.ForeignGenerator.generate(ForeignGenerator.java:44)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:91)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:502)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:494)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:410)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:299)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
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.dao.Base2Dao.addOneUsers(Base2Dao.java:52)
at com.dao.test.MainTest.addManyToMany2RoletoUsers(MainTest.java:35)
at com.dao.test.MainTest.main(MainTest.java:30)

这个是什么原因,我翻译之后意思是说要把id改成assign,可是我现在把id使用了一对一的外键关系,如何改动可以使关系能够共存?谢谢了~

[解决办法]
<one-to-one name="users"

<one-to-one name="card" class="com.model.Card"

你在2个里面都是相同的,那么到底哪个是主呢?

你考虑一下吧,呵呵。

你在保存另外一个时,要设置好对应的属性

热点排行