Nhibernate 一对一关系映射(主键映射)

参考:点击这里

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

时间: 2024-12-25 17:27:23

Nhibernate 一对一关系映射(主键映射)的相关文章

Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

1:Hibernate的关联关系映射的一对一外键映射: 1.1:第一首先引包,省略 1.2:第二创建实体类: 这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的主键又可以做身份证信息的外键,这里先做外键. 创建User.java: 用户和身份证一对一的关联关系映射       private IdCart idCart; IdCart.java: 身份证和用户,一对一的关系       private User user; 1 package com.bie.bean; 2

Java的Hibernate框架中复合主键映射的创建和使用教程_java

复合主键映射需要在映射配置文件中使用<composite-id>标签,该标签是指将一个类指定为相应的复合主键,它的name属性需要指定类文件中定义的属性值,并在该标签中添加<key-property>子标签. Note:想要使用复合映射必须要将复合主键放到一个类中,也就是讲复合主键属性和其它属性分到两个类中,并将复合主键的类实现接口Serializable,该接口隶属于java.io. 复合主键的映射关系的主键是由多个列复合而成的,对应到数据表中相当的简单,如下图: 1.类文件这里

Nhibernate一对一关系映射概述

现有两个表:user(用户)和Blog(设置表),它们之间的关系正如我所说的是一对一的关系.现在我们来映射这两个文件: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="MyMvc4Project.Models" assembly="MyMv

第九章 关系映射 一对一关系 唯一外键方式实现一对一

如:person与idCard 基于外键的one-to-one可以描述为多对一.   hibernate 一对一唯一外键关联映射(双向关联 Person<---->IdCard )           一对一唯一外键 双向 关联,需要在另一端(person ),添加 <one-to-one> 标签,指示 hibernate 如何加载 其关联对象,默认根据主键加载idcard ,外键关联映射中,因为两个实体采用的是 idcard 的外键维护的关系, 所以不能指定主键加载 idcard

EntityFramework之一对一关系(二)

前言 关于表关系园中文章也是数不胜收,但是个人觉得最难攻克的是一对一,对其配置并非无道理可循,只要掌握了原理方可,且听我娓娓道来! 共享主键关系 概念:就是两个表共享相同的主键值,也就是说一表的主键值是另外一个表的外键值. 我们现在给出三个类,一个是User(用户类),一个是Address(地址类),最后一个是Shipment(运货车类).每个用户都对应一个银行账户地址也就是Address,同时运货车都有一个运货的地点也就是Address.鉴于此设计类图如下并且我们建立如下三个类. /*用户类*

hibernate 复合主键中一部分是外键如何映射

问题描述 求救,比如我有一个Menu,主键是Menuid和Menuname,在Category中,我的主键是Menuid+Menuname+Catid.请问这用hibernate如何做到? 解决方案 解决方案二:映射的时候可以指定字段映射,不一定非要主键映射property-ref和column两个可以指定两张表的关系没有property-ref,自动匹配主键

Java的Hibernate框架中的双向主键关联与双向外键关联_java

一.双向主键关联双向的主键关联其实是单向一对一主键关联的一种特殊情况,只不过要在关联对象的两端的映射文件中都要进行<one-to-one>的配置,另外还要在主映射的主键一端采用foreign外键关联属性. 这里同样使用Person和IdCard来讨论,一个人对应着一个唯一的身份证,而且一个身份证也唯一映射着一个人,所以这就产生了双向的关联关系,Person的主键同样也是IdCard的主键,分别是主键的同时也是外键,这种关联关系成为双向一对一映射,表现到关系模型中可如下图: 图中的两个表采用了主

hibernate3学习笔记(十一)|复合主键

新建数据库User: 1.CREATE TABLE user (2. name VARCHAR(100) NOT NULL,3. phone VARCHAR(50) NOT NULL,4. age INT,5. PRIMARY KEY(name, phone)6.); 现将name和phone定义成复合主键.分别使用2种方法如下: 方法1.复合主键字段直接包含在PO类中. User.java(需要实现Serializable接口,并定义equals()和hashCode()方法) 1.packa

知道复合主键中一个字段属性值,如何得到另一个字段属性值

问题描述 我的复合主键是由2个字段组成的,现在能拿到其中一个字段的值,不知道如何拿到另一个值?小弟诚请各位高手解决,online等!谢谢了 解决方案 上面的发错了,用JDBC和hibernate都可以直接查询,返回的有可能是多条记录.JDBC: select id_a from table1 where id_bhibernate: 一般复合主键映射成一个实体对象如: public class Table1 { private TableId id; private String xxxProp