hibernate在地图的方法之一协会
【Hibernate】之关于多对一单向关联映射
在项目的开发中多对一的单向关联映射是最常见的关联映射!
这个着重具体解说一下!
比如,我们如今一个组(Group)和人(Person)
| id | name |
| 1 | 张三 |
| 2 | 李四 |
(person表)
| id | name | p_id |
| 1 | 財务组 | 1 |
| 2 | 財务组 | 2 |
(Group表)
由上表我们发现,是不是出现数据的反复?財务组在反复!
所以。在多对一的单向映射中,我们一般是在多的一方加上外键来关联少的一方。
那么在这个关系中(Group)是少的一方。(Person)是多的一方。一个组里面能够有多个人!
| id | name |
| 1 | 財务组 |
| 2 | 开发组 |
(person表)
| id | name | G_id |
| 1 | 张三 | 1 |
| 2 | 李四 | 1 |
(Group表)
上面这样的关系才是正常的业务逻辑!
ok,以下来看我们的Annotations配置!
@Entity
@Table(name="t_user")
publicclass Person {
private Integer id;
private String name;
private Integer age;
private Group group; @ManyToOne
public Group getGroup() {
returngroup;
}
publicvoid setGroup(Groupgroup) {
this.group = group;
}
@Id
@GeneratedValue
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
@Column(name="name")
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
@Column(name="age")
public Integer getAge() {
returnage;
}
publicvoid setAge(Integerage) {
this.age = age;
}
}
@Entity
@Table(name="t_group")
publicclass Group {
private Integer id;
private String name; @Id
@GeneratedValue
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
@Column(name="name")
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
}
XML配置方法
package csg.hibernate.entity;
publicclass Person {
private Integer id;
private String name;
private Integer age;
private Group group;
public Group getGroup() {
returngroup;
}
publicvoid setGroup(Groupgroup) {
this.group = group;
}
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
public Integer getAge() {
returnage;
}
publicvoid setAge(Integerage) {
this.age = age;
}
}
package csg.hibernate.entity;
publicclass Group {
private Integer id;
private String name;
public Integer getId() {
returnid;
}
publicvoid setId(Integerid) {
this.id = id;
}
public String getName() {
returnname;
}
publicvoid setName(Stringname) {
this.name = name;
}
}
<?xml version="1.0"? >
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="csg.hibernate.entity">
<class name="Person" table="t_user">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<property name="age"/>
<many-to-one name="Group" column="group_id"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="csg.hibernate.entity">
<class name="Group" table="t_group">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
</class>
</hibernate-mapping>
到这里我们使用Junit測试一下!
publicclass JuniTest {
privatestatic SessionFactory sessionFactory;
@BeforeClass
publicstaticvoid beforeClass() {
Configuration cfg=new Configuration();
cfg.configure();
sessionFactory=cfg.buildSessionFactory();
}
@Test
public void add(){
try {
Group group=new Group();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
group.setName("部门");
session.save(group);
Person person=new Person();
person.setAge(12);
person.setName("张三");
person.setGroup(group);
session.save(person);
session.getTransaction().commit();
} catch (HibernateException e){
e.printStackTrace();
}
}
@AfterClass
publicstaticvoid afterClass() {
sessionFactory.close();
}
}
ok!
版权声明:本文博客原创文章。博客,未经同意,不得转载。
hibernate在地图的方法之一协会的更多相关文章
- hibernate save,update,saveorupdate方法有什么区别
save肯定是添加的时候用,update修改时候用,saveorupdate是添加或修改,如果真是这样save和update的存在就没意义了,我们直接saveorupdate就行了. save在添加用 ...
- Hibernate HQL的update方法详解
虽然hibernate提供了许多方法对数据库进行更新,但是这的确不能满足开发需要.现在讲解一下用hql语句对数据进行更新. 不使用参数绑定格式String hql="update User ...
- 网站地图怎么做?dedecms网站地图制作方法听语音
网站地图怎么生成?下面分享织梦dedecms系统网站地图的生成方式,怎么制作网站地图,方法很简单.下面介绍一下网站地图优化方法及制作方法. 工具/原料 一个网站 方法/步骤 第一步 登录网站后台 第二 ...
- hibernate中的merge()方法
Hibernate提供有save().persist().savaOrUpdate()和merge()等方法来提供插入数据的功能.前三者理解起来较后者容易一些,而merge()方法从api中的介绍就可 ...
- hibernate笔记--双向一对多映射方法
前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示: 很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这 ...
- hibernate笔记--单向一对多映射方法
上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应 ...
- hibernate笔记--组件映射方法
假设我们需要保存学生student的信息,student中有一个address属性,我们知道像这种信息其值可能会有多个,就像一个人会有两个以上的手机号,这种情况在hibernate中应该这样配置: 新 ...
- hibernate的集中持久化方法的区别
一.预备知识 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient.persistent.detached 下边是常见的翻译办法: transient:瞬态或者自由态 ...
- HTML插入地图的方法
方法/步骤 1.打开"百度地图生成器"的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 如下图: 2.在"1 ...
随机推荐
- cocos2d-x 3.1.1 学习笔记[2]Sprite 精灵
Sprite应该是用到最多的一个类吧.无法想像一个游戏没有精灵将怎样进行愉快的玩耍. Sprite继承于Node 和 TextureProtocol. Sprite是一个2d的图像. Sprite能够 ...
- 从零开始学Xamarin.Forms(五) 技巧
原文:从零开始学Xamarin.Forms(五) 技巧 由于HTML5规范于2014年10月终于定稿,公司.net开发人员较少,国内外已有了较为成熟的UI框架.手机软件硬件的快速发展等等原因,所以我就 ...
- vps自己搭建VPN(转)
1.购买一个VPS: https://www.pzea.com/North-America-openvz-vps.html 2.下载putty软件,进行vpn安装: http://www.chiark ...
- ASP.NET——验证码的制作
我们在登陆站点,发表博客或者提交评论的时候,常常会遇到填写验证码这一项,当时感觉挺奇妙的样子,最终在牛腩新闻公布系统里接触到了,在这里小小的总结下. 用到的东东有三个: ...
- centos 安装 使用本地图像文件来安装网络安装
有时很无奈,无盘,U它只有盘4G而一个centos该盘4.16G,如何将它安装了网络安装,对不起,你想用20M更多的带宽,并注意使用网络启动盘的方法 没有条件,应该创造条件: 网络安装,需要下载图片, ...
- HDU ACM 1071 The area 定积分计算
分析: 1.求抛物线方程F(x)=a*x^2+b*x+c: 2.求直线方程f(x)=k*x+b. 3.利用定积分计算F(x)-f(x)在x2到x3之间的面积. #include<iostream ...
- java输入输出高速
头文件: import java.io.*; 定义: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); ...
- 第三届蓝桥杯C++本科B组决赛解题报告(更新中)
<1>星期几 9 package JiaNan; import java.util.Calendar; import java.util.GregorianCalendar; public ...
- sql server基本流程语句
- HDU 2063 过山车 二分图题解
一个男女搭配的关系图,看能够凑成多少对,基本和最原始的一个二分图谜题一样了,就是 一个岛上能够凑成多少对夫妻的问题. 所以是典型的二分图问题. 使用匈牙利算法,写成两个函数,就很清晰了. 本程序还带分 ...