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 一.一对一关系的概述 一对一关系看起来简单 ...
随机推荐
- Java 编程的动态性,第 7 部分: 用 BCEL 设计字节码--转载
在本系列的最后三篇文章中,我展示了如何用 Javassist 框架操作类.这次我将用一种很不同的方法操纵字节码——使用 Apache Byte Code Engineering Library (BC ...
- 非对称加密算法RSA--转
RSA 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和L ...
- [转] GDB attach
转:http://blog.csdn.net/wangeen/article/details/14230171 attach是GDB一种重要的debug模式,在MPI程序debug中发挥重要的作用. ...
- Linux最大文件打开数
介绍 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默认是 ...
- 综合使用LruCache和DiskLruCache 缓存图片
Activity public class MainActivity extends Activity { private GridView mPhotoWall; private P ...
- SoundPool 音频播放 详解 示例
简介 如果应用程序经常播放密集.急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了.因为MediaPlayer存在如下缺点: 1) 延时时间较长,且资源占用率高. 2) ...
- TFS统计编码行数语句
****** Script for SelectTopNRows command from SSMS ******/ SELECT TeamProjectProjectNodeName 项目名称 ,c ...
- CentOs上搭建git服务器
CentOs上搭建git服务器 首先安装setuptools wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0 ...
- JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法
转载至http://www.blogjava.net/itspy/archive/2007/12/20/169072.html Oracle 问题描述:今天使用jdbc连接oracle 10.2.0. ...
- iOS9之后对于NSURL的编码转换方法变化说明
在iOS9之后,官方推荐使用下面的方法对NSString进行转换 - (nullable NSString *)stringByAddingPercentEncodingWithAllowedChar ...