什麼HBM我必須寫Blog
和Post
有這些表之間的雙向關係?
我試圖從兩邊many-to-one
但碰到以下問題(很可能是因爲我做到了完全錯誤的):NHibernate的許多-to-one和雙向訪問
- 瞬態持久性錯誤,在一個
Session
插入對象圖。 - 與
Blog
和Post
表引用彼此外交的關鍵問題。
注意:我的例子是人爲設計的,請不要爭論設計。
設計:
來源:
public class Blog
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Comment LastComment { get; set; } // last-comment
public virtual IList<Post> Posts { get; set; }
}
public class Post
{
public virtual int Id { get; set; }
public virtual string Content { get; set; }
public virtual IList<Comment> Comments { get; set; }
}
public class Comment
{
public virtual int Id { get; set; }
public virtual string Feedback { get; set; }
public virtual Blog Blog { get; set; } //commented-on
}
HBM:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Sample"
namespace="Sample">
<class name="Blog">
<id name="Id">
<generator class="hilo" />
</id>
<property name="Name" />
<!-- How to map Comment? -->
<bag name="Posts">
<key column="BlogId" />
<one-to-many class="Post" />
</bag>
</class>
<class name="Post">
<id name="Id">
<generator class="hilo" />
</id>
<property name="Feedback" />
<bag name="Comments">
<key column="PostId" />
<one-to-many class="Comment" />
</bag>
</class>
<class name="Comment">
<id name="Id">
<generator class="hilo" />
</id>
<property name="Comment" />
<!-- How to map back to Blog? -->
</class>
</hibernate-mapping>
所需DB結構:
+------------------------------+
| Blog |
+--------------+---------------+
| Id | int |
| Name | nvarchar(50) |
| LastCommentId| int (null) |
+--------------+---------------+
+------------------------------+
| Post |
+--------------+---------------+
| Id | int |
| BlogId | int |
+--------------+---------------+
+------------------------------+
| Comment |
+--------------+---------------+
| Id | int |
| PostId | int |
| BlogId | int (not-null)|
| Feedback | nvarchar(200) |
+--------------+---------------+
也許我不清楚爲什麼這是所需的結構;如果一篇文章屬於博客,那麼爲什麼評論屬於帖子沒有足夠的信息來確定它在哪個博客? – Paul 2011-03-05 19:30:45
@保羅,我提到的例子是人爲的。我真正的例子是在這裏嘗試一個解釋很複雜。 – 2011-03-05 19:52:10