Kann mir jemand dieses kleine Geheimnis erklären, wie NHibernate mit Verbundelementen umgeht?Warum löscht NHibernate dann Composite-Elemente bei Auswahl einfügen?
Ich habe Klassen, die so aussehen;
public class Blog
{
public virtual int Id
{
get;
private set;
}
public virtual ISet<Comment> Comments
{
get;
set;
}
}
public class Comment
{
public virtual string CommentText
{
get;
set;
}
public virtual DateTime Date
{
get;
set;
}
}
und Zuordnungen wie diese;
<class name="Blog" table="blog">
<id name="Id" column="id" unsaved-value="0">
<generator class="hilo"/>
</id>
<set name="Comments" table="blog_comments">
<key column="blog_id" />
<composite-element class="Comment">
<property name="CommentText" column="comment" not-null="true" />
<property name="Date" column="date" not-null="true" />
</composite-element>
</set>
</class>
Allerdings, wenn ich eine Auswahl wie diese durchführen;
using (ITransaction transaction = session.BeginTransaction())
{
Blog blog = session.CreateCriteria(typeof(Blog))
.SetFetchMode("Comments", FetchMode.Eager)
.Add(Expression.IdEq(2345))
.UniqueResult();
transaction.Commit();
}
NHibernate gibt eine select mit einem Join den Blog mit den Beiträgen zu bekommen, aber löscht dann alle Kommentare und fügt dann die Kommentare! Warum macht es das? Wenn ich keine Transaktion verwende, führt sie NUR die Auswahl und nicht die DELETE- und INSERT-Funktion aus, wie ich es erwarten würde. Was vermisse ich? Ich verwende NHibernate 2.0
Danke, ich hatte diese in meiner Vollversion implementiert, aber muss etwas falsch in der Überschreibung für GetHashCode gemacht haben, das Beispiel, das Sie zur Verfügung gestellt hat, funktioniert wie ein Charme. Danke nochmal. – Gareth