我有NHibernate的问题。我想要的是非常简单的: 我有两个课程。 UserTicket和UserData。 UsertTicket有一些UserData,UserData属于一个UserTicket:
public class UserData{
public virtual int Id { get; set; }
public virtual String PDF_Path { get; set; }
}
public class UserTicket
{
public virtual int Ticketnr { get; set; }
public virtual IList<UserData> UserData { get; set; }
}
这里是mappig xml:
<class name="UserTicket" table="UserTicket">
<id name="Ticketnr">
<generator class="identity"/>
</id>
<bag name="UserData" inverse="true" cascade="all-delete-orphan" lazy="false">
<key column="FK_Ticketnr" not-null="false"/>
<one-to-many class="UserData" />
</bag>
</class>
<class name="UserData" table="UserData">
<id name="Id">
<generator class="identity"/>
</id>
<property name="PDF_Path" />
</class>
当我运行它时,它可以工作,但是UserData的DB-Table中的列FK_Ticketnr总是= NULL。 有人告诉我,我必须从我的孩子(UserData)到父类进行反向链接。但我无法弄清楚如何做到这一点。如何让Hibernate将UserTicket的Primary-Key(Ticketnr)的值写入FK_Ticketnr?
提前致谢
答案 0 :(得分:4)
在你的包上删除inverse =“true”。这告诉NHibernate该关系是从UserData映射管理的。由于您没有后向引用,因此永远不会持久化。另一个选项是在UserData上放置一个父引用,但如果你不需要它我就不推荐它。
答案 1 :(得分:2)
替代方案如下......
public class UserData
{
// Keep your other properties, add this one too...
public virtual UserTicket Ticket { get; set; }
}
像这样修改您的映射文件......
<class name="UserData" table="UserData">
<id name="Id">
<generator class="identity" />
</id>
<property name="PDF_Path" />
<many-to-one name="Ticket" column="FK_Ticketnr" />
</class>
将inverse="true"
放在行李上。
如果您采用这种方法,则在将UserData对象添加到UserData包时,需要在其上设置Ticket。换句话说,你需要保持关系的两面。您可以手动执行此操作,也可以尝试使用方法或构造函数自动执行此操作。