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 一.一对一关系的概述 一对一关系看起来简单 ...
随机推荐
- NYOJ 1091 超大01背包(折半枚举)
这道题乍一看是普通的01背包,最最基础的,但是仔细一看数据,发现普通的根本没法做,仔细观察数组发现n比较小,利用这个特点将它划分为前半部分和后半部分这样就好了,当时在网上找题解,找不到,后来在挑战程序 ...
- ListControl一细节处理
做VC ListControl的时候发现一个问题,右击菜单的时候,在没有列表数据的空白处也会出现菜单,这可够纠结的,于是用了点方法解决了,希望分享同样不爽的朋友们.代码如下: void CXXXDlg ...
- 8、第八次课jquery第一节20151006
1.JS JQUERY 的区别 jquery 底层基于js 它是对于JS进行封装,代码量比较少.[write less do more] 网上可以下载jquery 类库文件,写的时候需要智能提示在js ...
- 学习WCF(1)
1. 什么是WCF WCF是创建面向服务应用程序的一个框架,用WCF, 你可以发送异步消息. 一个服务的终结点可以是服务宿主在IIS上面,也可以是一个服务宿主在应用程序上面.一个终结点也可以是客户端的 ...
- codesmith的使用
新建一个C#模版. model类的模版代码如下: <%-- Name: 模型层代码生成模版 Author: XX Description: 根据数据库的内容生成模型层代码 Version: V1 ...
- 定义Foo() 函数,弹出对话框提示当前选中的是第几个单选框
function foo(){ var ele = document.getElementsByName("radioElement"); for(var i = 0;i<e ...
- Php ORM 对象关系映射
ORM的全称是Object Relational Mapping,即对象关系映射.它的实质就是将关系数据(库)中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将 ...
- java 代码第一天练习
这个是在其他博文中看到的http://blog.sina.com.cn/eltaera,用来记录学习分享 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个 ...
- Java反射 - 2(对象复制,父类域,内省)
为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...
- [转]SGI STL 红黑树(Red-Black Tree)源代码分析
STL提供了许多好用的数据结构与算法,使我们不必为做许许多多的重复劳动.STL里实现了一个树结构-Red-Black Tree,它也是STL里唯一实现的一个树状数据结构,并且它是map, multim ...