hibernate annoation (八 关联映射)

onetoone:单向

1,主键关联:

在关联放使用@OneToOne

sql语句:(类代码见同前面的代码)

Java代码

create table A (id integer not null auto_increment, aname varchar(255), b_id integer, primary key (id))
create table B (id integer not null auto_increment, bname varchar(255), primary key (id))
alter table A add index FK41FCD34905 (b_id), add constraint FK41FCD34905 foreign key (b_id) references B (id) 

可以使用@PrimaryKeyJoinColumn进行关联

2 双向:

在关联方使用 

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name="b")

被关联方使用

@OneToOne(mappedBy="b")

最终sql:

Java代码 create table A (id integer not null auto_increment, aname varchar(255), b integer, primary key (id))
create table B (id integer not null auto_increment, bname varchar(255), primary key (id))
alter table A add index FK41FCA54B4F (b), add constraint FK41FCA54B4F foreign key (b) references B (id)

如果不写

@OneToOne(mappedBy="b")则会在被关联放也生成一个字段

最终代码:

Java代码

create table A (id integer not null auto_increment, aname varchar(255), i_id integer, primary key (id))
create table B (id integer not null auto_increment, bname varchar(255), a_id integer, primary key (id))
alter table A add index FK41FCD6779E (i_id), add constraint FK41FCD6779E foreign key (i_id) references B (id)
alter table B add index FK42FCD2D4A5 (a_id), add constraint FK42FCD2D4A5 foreign key (a_id) references A (id)

如果没有写@JoinColumn(name="b")则默认是关联属性名+下划线+id

最终sql:

Java代码

create table A (id integer not null auto_increment, aname varchar(255), b_id integer, primary key (id))
create table B (id integer not null auto_increment, bname varchar(255), primary key (id))
alter table A add index FK41FCD34905 (b_id), add constraint FK41FCD34905 foreign key (b_id) references B (id)

可以使用@JoinColumn(referencedColumnName="bname")让主关联方不关联被关联放的主键

最终sql

Java代码

create table A (id integer not null auto_increment, aname varchar(255), b_bname varchar(255), primary key (id))
create table B (id integer not null auto_increment, bname varchar(255), primary key (id), unique (bname))
alter table A add index FK41E47CD6BD (b_bname), add constraint FK41E47CD6BD foreign key (b_bname) references B (bname)

时间: 2024-10-29 22:56:42

hibernate annoation (八 关联映射)的相关文章

Hibernate中通过关联映射取得结果集对结果进行排序、分页的方法

问题描述 在Hibernate中通过关联映射, 例如OneToMany等取得一个实体的属性结果集时有没有办法对结果进行排序或者分页. 直接通过HQL或者SQL可以直接利用HQLSQL进行排序分页等操作, 但是如果这类关联映射不支持这些操作那么关联映射的作用感觉也不是很大了. 例如一个User实体有一个Set<Logs>属性, 即一个用户有N多操作日志,OneToMany的, 那么如果通过User.getLogs()取得的结果集将是全部查询··· 解决方案 作为属性,分页应该不行.排序可以: @

Hibernate多对多关联映射的HQL中的in条件查询问题

群里有朋友求解一个问题,高分求一条HQL多对多查询语句 . 问题描述见 http://topic.csdn.net/u/20090621/16/4eac6fe0-bf3e-422e-a697-f7584732f66e.html, 摘要如下: 一个学科表(Field),一个用户表(User),多对多关系. 学科表有两个字段,id和descripiton,用户表有众多字段,不罗列了 Field中有SET集合users User中有SET集合fields 现在要查掌握id like '520%'的女性

系统学习hibernate之四 hibernate多对一关联映射

一.关联映射的本质: * 将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用 <many-to-one>会在多的一端加入一个外键,指向一的一端,这个外键是由<many-to-one> 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致 <many-to-one>标签的定义示例: * <many-to-one name="group" column="groupid"/>

hibernate多对一关联映射问题

问题描述 /*一级栏目类*/@Entity@Table(name="tb_biglb")publicclassBiglbBeanimplementsSerializable{privateintbgid;privateStringbgname;privateSet<SmlbBean>smlbs=newHashSet<SmlbBean>();@OneToMany(mappedBy="bglb",fetch=FetchType.EAGER)pub

hibernate annoation (七 继承映射)

Table per Class Strategy: the <union-class> element in Hibernate Single Table per Class Hierarchy Strategy: the <subclass> element in Hibernate Joined Subclass Strategy: the <joined-subclass> element in Hibernate ejb支持三种映射关系 1,每个类一张表 (hi

Hibernate从入门到精通(八)一对多单向关联映射

上次的博文Hibernate从入门到精通(七)多对一单向关联映射我们主要讲解了一下多对一单向关联映射, 这次我们继续讲解一下一对多单向映射. 一对多单向关联映射 在讲解一对多单向关联之前,按 照我们的惯例首先看一下其相应的类结构图和代码.具体如下: public class Classes { private int id; private String name; private Set students; public int getId() { return id; } public vo

Hibernate从入门到精通(九)一对多双向关联映射

上次的博文Hibernate从入门到精通(八)一对多单向关联映射中,我们讲解了一下一对多单向映射的相关 内容,这次我们讲解一下一对多双向映射的相关内容. 一对多双向关联映射 一对多双向关联映 射,即在一的一端存在多的一端的一个集合对象,在多的一端存在一的一端的一个对象,这样就可以保证在加 载一的一端或多的一端将被指向端的集合或对象加载上来,即保证双向关联. 一对多双向关联映射和 一对多单向关联映射的异同 一对多双向关联映射相应的类结构图和代码.具体如下: public class Classes

Hibernate框架学习之四:关联映射那些事

前言 Hibernate关联关系与客观世界中具体的映射关系很类似,在进行数据库设计的时候常常需要考虑是一对多.多对一等类似的映射关系,这其中涉及数据库设计方面的知识.映射关系可以分为单向与双向两种,具体又包括一对多.多对一.一对一以及多对多四种.所以总共有八种映射关系.这里只介绍了XML配置文件的版本. 下面的配置文件的配置方式都以下面的两个持久化类作为模板: public class Person { private int id; private String name; private i

Hibernate学习(五)一对多单向关联映射

在上一篇博客<一口一口吃掉Hibernate(四)--多对一单向关联映射>中,介绍了多对一的关联映射,今天就反过来说一下一对多的单向关联映射. 可能有人会对这2篇博客的题目有点混淆不清,跟日常说的关系有点不同.我们日常说的比如父子关系,夫妻关系都是说的双向关系,而现在讨论的则是单向关系,所以也就有了多对一和一对多的说法. 二者的关系其实很简单,只是角度不同而已.比如说学生和班级的关系.如果从学生角度来看,是多对一的关系.而从班级角度来看,则是一对多的关系.说法很简单,但是在对象和关系的建立却是