onetoone:单向
1,主键关联:
在关联放使用@OneToOne
sql语句:(类代码见同前面的代码)
- 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)
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:
- 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)
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")则会在被关联放也生成一个字段
最终代码:
- 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)
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:
- 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)
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
- 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)
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)
3 关联表
使用
@OneToOne(cascade=CascadeType.ALL)
@JoinTable(name="centert",joinColumns=@JoinColumn(name="aid"),inverseJoinColumns=@JoinColumn(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这会产生中间表:
- 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)
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属性可以关联接口
例如接口代码
public interface I {
}
class B implments I
关联方:
- private I i;
- @ManyToOne(targetEntity=B.class)
- public I getI() {
- return i;
- }
private I i;
@ManyToOne(targetEntity=B.class)
public I getI() {
return i;
}
最终sql:
- 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)
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)