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)
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這會產生中間表:
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代碼
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)