浏览 3373 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-12-01
我遇到一个问题,我有个一个article类和一个author类,是many-to-one的关系,我是在author一段设置了inverse="true"的,但是每次我 用代码: Article art=new Article();; article.setTitle("test");; article.setContent("this is test");; Author au=new Author();; au.setAuthorname("lyo");; au.addArticle(art);; session.save(au);; 照理说如果我设置了inverse="true"的话,每次当session.save的时候,只需要save inverse="true"的一端就可以了,但是我发现这不行,每次运行后只有author的内容被存入数据库,article的内容没有存入,这是怎麽回事?是不是我哪里忘记设置了?我的 xml文件如下: <hibernate-mapping> <class name="lyo.hotmail.test.Article" table="article"> <id name="id" column="id" type="int" unsaved-value="0"> <generator class="identity"/> </id> <property name="title"/> <property name="content"/> <property name="time"/> <many-to-one name="au" column="aid" not-null="true"/> </class> <class name="lyo.hotmail.test.Author" table="author"> <id name="id" column="id" type="int" unsaved-value="0"> <generator class="identity"/> </id> <property name="authorname"/> <set name="article" lazy="true" inverse="true"> <key column="aid"/> <one-to-many class="lyo.hotmail.test.Article"/> </set> </class> </hibernate-mapping> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-12-01
说说我的理解,未经验证。
在你的代码中,au对象不是一个持久对象,因此au.addArticle(art)并不能触发一个插入art对象的操作。假设你这样写 Author au=new Author();; au.setAuthorname("lyo");; session.save(au);; au.addArticle(article);; 就可以插入了art了。因为au已经成为一个持久对象了,他的add方法就可以触发插入动作。 如果你的au因为不是持久对象,因此需要显式的指定art来setAuthor: Article art=new Article();; article.setTitle("test");; article.setContent("this is test");; Author au=new Author();; au.setAuthorname("lyo");; au.addArticle(art);; article.setAuthor(au);; session.save(au);; |
|
返回顶楼 | |
发表时间:2003-12-01
引用 照理说如果我设置了inverse="true"的话,每次当session.save的时候,只需要save inverse="true"的一端就可以了 没这种说法,你把inverse和cascade搞混了 凡是双向的关联,总要两边一起更新 Article art=new Article();; article.setTitle("test");; article.setContent("this is test");; Author au=new Author();; au.setAuthorname("lyo");; au.addArticle(art);; art.setAuthor(au);;//这句必须要写! session.save(au);; |
|
返回顶楼 | |
发表时间:2003-12-01
sorry,我没有说清楚,我的add方法是包括setAuthor这个操作的
public void addArticle(Article art);{ if(this.getArticle();!=null);{ this.getArticle();.add(art);; art.setAu(this);; }else{ article=new HashSet();; article.add(art);; art.setAu(this);; } } public Set getArticle();{ return this.article; } public void setArticle(Set article);{ this.article=article; } } 可见正向操作和反向操作都包括了,就是说我在这个add中有setArticle,应该没问题了? |
|
返回顶楼 | |
发表时间:2003-12-01
sorry,我没仔细看
引用 article的内容没有存入 <set name="article" lazy="true" inverse="true"> 映射改为 <set name="article" lazy="true" inverse="true" cascade="save-update"> 或 cascade="all"或 cascade="all-delete-orphan",看你的具体要求了 |
|
返回顶楼 | |
发表时间:2003-12-03
多谢,现在可以了,原来是我把inverse和cascade弄错了,我这里应该用cascade
|
|
返回顶楼 | |
发表时间:2003-12-03
那么这里的inverse=true,起了什么作用呢?
|
|
返回顶楼 | |
发表时间:2003-12-04
应该是建立外健和主健关联,比如主表中的foreign key aid和从表中的id
|
|
返回顶楼 | |