Nhibernate一对一关系映射概述2015-12-23 承影剑 现有两个表:user(用户)和Blog(设置表),它们之间的关系正如我所说的是一对一的关系。现在我们来映射这两个文件:
<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"namespace="MyMvc4Project.Models" assembly="MyMvc4Project.Models"><class name="MyMvc4Project.Models.User" table="Users" lazy="false"><id name="Id"><column name="Id" sql-type="varchar(40)" not-null="true"/><generator class="uuid.hex" /></id><one-to-one name="Blog" class="Blog" cascade="all"></one-to-one></class></hibernate-mapping><?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"namespace="MyMvc4Project.Models" assembly="MyMvc4Project.Models"><class name="MyMvc4Project.Models.Blog" table="Blog" lazy="false"><id name="Id"><column name="Id" sql-type="varchar(40)" not-null="true"/><generator class="foreign"><param name="property">User</param></generator></id><one-to-one name="User" class="User" constrained="true"></one-to-one></class></hibernate-mapping>
现在测试如何保存数据:
var userDal = new UserDal();var blogDal = new BlogDal();var user = new User{ Name = name, Password = password, PostTitle = posttitle, CreateTime = DateTime.Now, Avatar = fileUrl };var blog = new Blog { User = user };user.Blog = blog;blogDal.Save(blog);userDal.Save(user);
总结:这样就成功了保存了数据,搞了“老子”一天的时间了,唉,其实hibernate一对一关联还有外键的关联等,我就使用了这个主键关联。1:如果hibernate设置了<id name="Id">
<column name="Id" sql-type="varchar(40)" not-null="true"/>
<generator class="uuid.hex" />
</id>这样的代码,你就可以不用在添加数据时用这样的代码了:Guid.NewGuid。(以前居然不知道,真是失败)。2:<generator class="foreign"><param name="property">User</param></generator>这个代码表示的意思是,Blog的主键参考User表里的主键值。3:也就是我上面保存数据的时候,我不确定是不是这样的操作,真的一点自信都没有,如果博友有的是hibernate专家,希望进来帮我看看,是不是这样保存数据(重要),还有一对一是不是这样配置的,唉,hibernate搞得我吐血了。