hibernate之关系映射上
分别创建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/25864763,http://blog.csdn.net/zhang_xinxiu/article/details/25950451
http://jinnianshilongnian.iteye.com/blog/1522591
hibernate之关系映射上的更多相关文章
- hibernate(3) —— 关系映射
hibernate中关系映射指的是实体类与实体类间的关系.和数据库中表与表之间的关系类似,有一对一,多对一,一对多,多对多四种映射关系. 一:一对一映射 两个对象之间是一对一的关系,如人和身份证之间是 ...
- Hibernate注解关系映射
Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid) 1)一对一外键关联映射(单向) @O ...
- Hibernate基础学习(四)—对象-关系映射(上)
一.映射对象标识符 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键值来识别或区分同一个表的不同记录.Hibernate使用对象标识符(OID)来建立内存中的对象和数 ...
- 详谈Hibernate框架关系映射!
接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...
- hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)
对象之间的关系: 关系映射之间的关系只的是对象之间的关系,并不指数据库表的关系(外键关系)这儿解决的问题是当对象之间的关系之一时,数据库表该如何映射,编程上如何对待. 一对一(主键关联,和单向的外键关 ...
- Hibernate表关系映射之一对一映射
一.数据表的映射关系 在数据库领域中,数据表和数据表之间关系一般可以分为如下几种: 一对一:比如公民和身份证的关系,一个人只有一张身份证,同时每张身份证也仅仅对应一个人! 一对多:比如客户和订单之间的 ...
- hibernate 实体关系映射笔记
@经常使用属性说明: @Entity:实体类 @Table:指定相应数据表 @Id:主键,使用能够为null值的类型,假设实体类没有保存到数据库是一个暂时状态 @Col ...
- Hibernate 对象关系映射文件
简介: POJO 类和关系型数据库之间的映射可以用一个 XML 文档来定义 通过 POJO 类的数据库映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据 ...
- hibernate(五) hibernate一对一关系映射详解
序言 之前讲解了一对多(单向.双向).多对多(双向),今天就讲解一下最后一个关系,一对一. 心情不错.状态也挺好的,赶紧写一篇博文造福一下大家把. --WH 一.一对一关系的概述 一对一关系看起来简单 ...
随机推荐
- JDK动态代理实现简单AOP--转
JDK 动态代理是 java 反射的一个重要特性.它在某种方面为 java 提供了动态性的特性,给应用带来了无限的空间.大名鼎鼎的 Hessian . Spring AOP 基于动态代理实现.本文将简 ...
- 【转】IOS7 MPMoviePlayerViewController横屏显示
在应用程序中用到MPMoviePlayerViewController时,有时需要保持应用程序为竖屏状态,而视频播放器显示为横屏,如何做呢?如果采用强制横屏的方法,应用审核的时候是不会通过的,因为该方 ...
- [转] shell文本字符串处理
第一种方法:#%*,#即截取变量前的字符(左向右截取),%表示截取后面字符(右向左截取),*匹配符 var=foodforthought.jpg ${varible##*string} 从左向右截取最 ...
- GSON 示例代码 实用版
去除所有格式的json字符串 {"data":[{"friend":[{"address":"广州","nam ...
- AngularJs学习之ng-repeat
ng-repeat用来遍历一个集合或为集合中的每个元素生成一个模板实例.集合中的每个元素都会被赋予自己的模板和作用域.同时每个模板实例的作用域中都会暴露一些特殊的属性. $index:遍历的进度(0 ...
- html5的Canvas
Canvas一般是指画布,最近对用html5写游戏比较感兴趣,所以简单的用了一下Canvas. 之前接触Canvas是在silverlight和wpf上用到过他,在silverlight上Canvas ...
- 堆/栈的比较 以及 malloc/new动态内存的开辟
堆与栈的比较:1.申请方式(1)栈(satck):由系统自动分配.(2)堆(heap):需程序员自己申请(c:调用malloc,realloc,calloc申请 free 来释放),并指明大小,并由程 ...
- 《Linux内核分析》 week5作业-system call中断处理过程
一.使用gdb跟踪分析一个系统调用内核函数 1.在test.c文件中添加time函数与采用c语言内嵌汇编的time函数.具体实现请看下图. 2.然后在main函数中添加MenuConfig函数,进行注 ...
- Ubuntu小私房(4)--Linux系统目录结构
Linux目录结构是Linux学习者必须了解的知识,Linux的目录与Windows又有很大的不同,所以搞清楚Linux目录结构是关键. Linux文件类型 (部分转自ChinaBytel) linu ...
- 汉诺塔 Hanoi Tower
电影<猩球崛起>刚开始的时候,年轻的Caesar在玩一种很有意思的游戏,就是汉诺塔...... 汉诺塔源自一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度 ...