分别创建user,farm,user_general三张表

create table user(
uuid bigint not null auto_increment,
name varchar(100),
age int not null,
province varchar(100),
city varchar(100),
street varchar(100),
constraint pk_user primary key(uuid)
)charset=utf8 ENGINE=InnoDB; create table user_general(
uuid bigint not null,
realname varchar(10),
gender varchar(10),
birthday int,
height int,
weight int,
constraint pk_user_general primary key(uuid),
constraint fk_user_general foreign key(uuid) references user(uuid))charset=utf8 ENGINE=InnoDB; create table farm(
uuid bigint not null auto_increment,
user_id bigint,
name varchar(10),
constraint pk_farm primary key(uuid),
constraint fk_farm foreign key(user_id) references user(uuid))charset=utf8 ENGINE=InnoDB;

单向关联:

1.多对一映射(many to one):

该标签在持久化类中属于多的一方配置;例如本例中farm即为多的一方。

重点是这段配置:

 <many-to-one name="user" class="org.hibernate.tutorials.domain.User" column="user_id" cascade="save-update"/>

其中column对应表中的外键(另一张表的主键),cascade设置为save-update后即可实现向数据库中级联修改

farm.hbm.xml配置:

 <hibernate-mapping>
<class name="org.hibernate.tutorials.domain.Farm" table="farm">
<id name="uuid">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="user" class="org.hibernate.tutorials.domain.User" column="user_id" cascade="save-update"/>
</class>
</hibernate-mapping>

Farm对应的实体类: 

public class Farm implements Serializable{

    private int uuid;

    private String name;

    private User user;//农场所属用户

    /**
* @return the uuid
*/
public int getUuid() {
return uuid;
} /**
* @param uuid the uuid to set
*/
public void setUuid(int uuid) {
this.uuid = uuid;
} /**
* @return the name
*/
public String getName() {
return name;
} /**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
} /**
* @return the user
*/
public User getUser() {
return user;
} /**
* @param user the user to set
*/
public void setUser(User user) {
this.user = user;
} /* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Farm [uuid=" + uuid + ", name=" + name + "]";
}

测试代码:

     Session session = HibernateUtil.getSessionFactory().getCurrentSession();

         User user = new User();
user.setName("lucy"); Farm farm=new Farm();
farm.setName("test3");
farm.setUser(user); Farm farm1=new Farm();
farm1.setName("test4");
farm1.setUser(user); session.beginTransaction();
session.save(farm);
session.save(farm1);
session.getTransaction().commit();

2.一对一映射(分为2种情况:唯一外键和主键关联)

2.1:唯一外键:用的标签仍为many-to-one 区别是需要加unique="true"属性表示唯一映射,具体案例看这里

2.2主键关联映射:(一个字段同时是主键和外键(user和user_general))

<one-to-one name="user" class="org.hibernate.tutorials.domain.User" constrained="true"/>  constrained="true"指明该类(UserGeneral)和关联的类(User)对应的表,通过外键引用对主键约束

UserGeneral.hbm.xml 配置

 <hibernate-mapping>
<class name="org.hibernate.tutorials.domain.UserGeneral" table="user_general">
<id name="uuid">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<property name="realname"/>
<one-to-one name="user" class="org.hibernate.tutorials.domain.User" constrained="true"/>
</class>
</hibernate-mapping>

测试代码:

     Session session = HibernateUtil.getSessionFactory().getCurrentSession();

         User user = new User();
user.setName("rrrrr"); UserGeneral ge=new UserGeneral();
ge.setUser(user);
ge.setRealname("cccccc"); session.beginTransaction();
session.save(ge);
session.getTransaction().commit();

参考:http://blog.csdn.net/zhang_xinxiu/article/details/25864763http://blog.csdn.net/zhang_xinxiu/article/details/25950451

http://jinnianshilongnian.iteye.com/blog/1522591

hibernate之关系映射上的更多相关文章

  1. hibernate(3) —— 关系映射

    hibernate中关系映射指的是实体类与实体类间的关系.和数据库中表与表之间的关系类似,有一对一,多对一,一对多,多对多四种映射关系. 一:一对一映射 两个对象之间是一对一的关系,如人和身份证之间是 ...

  2. Hibernate注解关系映射

    Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid)   1)一对一外键关联映射(单向) @O ...

  3. Hibernate基础学习(四)—对象-关系映射(上)

    一.映射对象标识符      Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...

  4. 详谈Hibernate框架关系映射!

    接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...

  5. hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)

    对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...

  6. Hibernate表关系映射之一对一映射

    一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...

  7. hibernate 实体关系映射笔记

    @经常使用属性说明:     @Entity:实体类     @Table:指定相应数据表     @Id:主键,使用能够为null值的类型,假设实体类没有保存到数据库是一个暂时状态     @Col ...

  8. Hibernate 对象关系映射文件

    简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...

  9. hibernate(五) hibernate一对一关系映射详解

    序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WH 一.一对一关系的概述 一对一关系看起来简单 ...

随机推荐

  1. Java基础知识强化86:BigInteger类之BigInteger概述和构造方法

    1. BigInteger类概述   可以让超过Integer范围内的数据进行运算 2. 构造方法: public BigInteger(String val) 3. 代码示例: package cn ...

  2. JS和利用openssl的object C加密得到相同的aes加密密文

    这是之前接到的一个工作内容,项目原本的登录操作是获得账号和密码以后,对密码进行一遍MD5加密,然后传递账号和密文到cgi文件.在c中获取到账户以后,从数据库中获取到密码,对密码进行一次MD5的加密,然 ...

  3. ubuntu 切换JDK版本

    安装: 第一种方式:sudo apt-get install openjdk-7-jdk(or openjdk-6-jdk) 第二种方式:tar -zxvf jdk-7u79-linux-x64.ta ...

  4. Android Studio 安装

    准备: JDK 7以及以上版本. Android Studio安装文件  中文站下载 http://www.android-studio.org/index.php/download exe ,包含S ...

  5. 12、第十二节课,css伪类 (转)

    一.特殊选择器 1.* 用于匹配任何的标记 2.> 用于指定父子节点关系 3.E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F 4.E ~ F 匹配所有E元素之后的同级元素F 5. ...

  6. JavaScript网页制作特效

    一.什么是JavaScript? 网页交互特效的脚本语言. 特效 二.BOM对象 能够使得JavaScript和浏览器进行对话. 主要是使用Window对象进行操作. History对象:历史,可以实 ...

  7. 类名.this与类名.class

    1..当在内部类中使用this指的就是内部类的对象, 为了访问外层类对象,就可以使用外层类名.this来访问. 2.在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后 ...

  8. ajax+ashx 完美实现input file上传文件

    1.input file 样式不能满足需求 <input type="file" value="浏览" /> IE8效果图:    Firefox效 ...

  9. C++拾遗(五)语句相关

    前缀格式与后缀格式 对于表达式:后缀如 i++ 表达式的值仍是 i,在遇到下一个顺序点后再将 i 加1.前缀 ++i 表达式的值就是(i+1),先计算表达式的值,不需要等待 顺序点. 对于类:前缀函数 ...

  10. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...