参考:点击这里
妈的,搞了一天了,终于可以了,现在总结下,以防下次再出现这样痛苦的问题了,有两个表: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搞得我吐血了。