【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在地图的方法之一协会的更多相关文章

  1. hibernate save,update,saveorupdate方法有什么区别

    save肯定是添加的时候用,update修改时候用,saveorupdate是添加或修改,如果真是这样save和update的存在就没意义了,我们直接saveorupdate就行了. save在添加用 ...

  2. Hibernate HQL的update方法详解

    虽然hibernate提供了许多方法对数据库进行更新,但是这的确不能满足开发需要.现在讲解一下用hql语句对数据进行更新. 不使用参数绑定格式String hql="update User ...

  3. 网站地图怎么做?dedecms网站地图制作方法听语音

    网站地图怎么生成?下面分享织梦dedecms系统网站地图的生成方式,怎么制作网站地图,方法很简单.下面介绍一下网站地图优化方法及制作方法. 工具/原料 一个网站 方法/步骤 第一步 登录网站后台 第二 ...

  4. hibernate中的merge()方法

    Hibernate提供有save().persist().savaOrUpdate()和merge()等方法来提供插入数据的功能.前三者理解起来较后者容易一些,而merge()方法从api中的介绍就可 ...

  5. hibernate笔记--双向一对多映射方法

    前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示: 很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这 ...

  6. hibernate笔记--单向一对多映射方法

    上一篇讲的是单向多对一的表关系,与单向一对多的关系正好相反,如下图所示关系: ,可以看出年级表和学生表是一对多的关系,一条年级信息对应多条学生信息,在hibernate中成为单向的一对多的映射关系,应 ...

  7. hibernate笔记--组件映射方法

    假设我们需要保存学生student的信息,student中有一个address属性,我们知道像这种信息其值可能会有多个,就像一个人会有两个以上的手机号,这种情况在hibernate中应该这样配置: 新 ...

  8. hibernate的集中持久化方法的区别

    一.预备知识 在所有之前,说明一下,对于hibernate,它的对象有三种状态,transient.persistent.detached 下边是常见的翻译办法: transient:瞬态或者自由态 ...

  9. HTML插入地图的方法

    方法/步骤 1.打开"百度地图生成器"的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 如下图: 2.在"1 ...

随机推荐

  1. poj3176--Cow Bowling(dp:数塔问题)

    Cow Bowling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14028   Accepted: 9302 Desc ...

  2. PopupMenu消失(Dismiss)抓住

    一.在class在implements PopupMenu该监听器类:OnDismissListener, 然后在类需要实现一个方法未实现:onDismiss(PopupMenu menu). 二.参 ...

  3. ubuntu12.04 安装和配置jdk1.7

    第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...

  4. 加入指数(IOS开发)

    该指数是用来协助查询. 原则上: - 索引的标题是不完全一样的标题显示: - 指数应该具有一定的代表性,它可表示一组数据: - 假设索引列表视图.在一般情况下不再使用扩展视图. (easy指向) 会又 ...

  5. 使用Ratpack和Spring Boot打造高性能的JVM微服务应用

    使用Ratpack和Spring Boot打造高性能的JVM微服务应用 这是我为InfoQ翻译的文章,原文地址:Build High Performance JVM Microservices wit ...

  6. quartz.net持久化和集群

    首先你应该使用的是持久化的quartz,所有定时任务的情况都是保存在数据库表总的,每次启动时,scheduler容器都是按照qrtz_triggers等表内存储的信息来执行定时任务(主要包括cron表 ...

  7. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点

    /* Create by sndnvaps<sndnvaps@gmail.com> * data: 2015-04-12* upload 2 datapoint to yeelink.ne ...

  8. 【原创】纯OO:从设计到编码写一个FlappyBird (六)

    第五部分请看这里 终于到了最后一个部分了! 这里使用SimpleJudge类来实现Judge接口. 首先是SimpleJudge需要的实例变量: 0.final LinkedList<Pilla ...

  9. ueditor文本编辑器的使用

    1,头部引用 <link href="ueditor/themes/default/css/ueditor.css" rel="stylesheet" t ...

  10. Stack-based buffer overflow in acdb audio driver (CVE-2013-2597)

    /* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰    邮箱: minzhenfei@163.com */ 1. 漏洞描写叙述 音频驱动acdb提供了一个ioctl的系统接口让应用层调用, ...