hibernate annoation (八 关联映射)
副标题#e#
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)
#p#副标题#e#
3 关联表
利用
@OneToOne(cascade=CascadeType.ALL)
@JoinTable(name="centert",[email protected](name="aid"),[email protected](name="bid"))
最终sql:
写道
create table A (id integer not null auto_increment, aname varchar(255), primary key (id))
create table B (id integer not null auto_increment, bname varchar(255), primary key (id))
create table centert (bid integer, aid integer not null, primary key (aid))
alter table centert add index FK27A6BEBFFCA6C7EA (bid), add constraint FK27A6BEBFFCA6C7EA foreign key (bid) references B (id)
alter table centert add index FK27A6BEBFFCA6C428 (aid), add constraint FK27A6BEBFFCA6C428 foreign key (aid) references A (id)
manytoone
和onetoone很相似
非凡环境:果不写:mappedBy这会发生中间表:
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), primary key (id))
create table B_A (B_id integer not null, a_id integer not null, unique (a_id))
alter table A add index FK41FCD6779E (i_id), add constraint FK41FCD6779E foreign key (i_id) references B (id)
alter table B_A add index FK10384FCD34905 (B_id), add constraint FK10384FCD34905 foreign key (B_id) references B (id)
alter table B_A add index FK10384FCD2D4A5 (a_id), add constraint FK10384FCD2D4A5 foreign key (a_id) references A (id)
如
targetEntity属性可以关联接口
譬喻接口代码
Java代码
public interface I {
}
class B implments I
关联方:
Java代码
private I i;
@ManyToOne(targetEntity=B.class)
public I getI() {
return i;
}
最终sql:
Java代码
#p#分页标题#e#
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), primary key (id))
alter table A add index FK41FCD6779E (i_id), add constraint FK41FCD6779E foreign key (i_id) references B (id)