2015-01-26 77 views
0

我是Hibernate的新手,我试图在Person和Vehicle类之间建立OneToMany/ManyToOne双向关系。在我的例子中,一个人可以拥有多辆车,一辆车只能属于一个人。我需要一个连接表:PERSON_VEHICLE,PERSON_ID和VEHICLE_ID作为列和VEHICLE表中的PERSON_ID列。这里是我的类设计:OneToMany双向关联示例

Person类:

@Entity 
public class Person { 

@Id 
@GeneratedValue 
@Column(name = "PERSON_ID") 
private int id; 
private String name; 
@OneToMany(cascade=CascadeType.ALL, mappedBy="person") 
private Collection<Vehicle> vehicleList = new ArrayList<>(); 

车辆类:

@Entity 
public class Vehicle { 

@Id 
@GeneratedValue 
@Column(name = "VEHICLE_ID") 
private int id; 
private String name; 
@ManyToOne 
@JoinColumn(name="PERSON_ID") 
@JoinTable(name="PERSON_VEHICLE", [email protected](name="VEHICLE_ID"), 
[email protected](name="PERSON_ID")) 
private Person person; 

这里由Hibernate生成的DDL。

create table Person (
    PERSON_ID integer not null auto_increment, 
    name varchar(255), 
    primary key (PERSON_ID) 
) 

create table Vehicle (
    VEHICLE_ID integer not null auto_increment, 
    name varchar(255), 
    primary key (VEHICLE_ID) 
) 

create table PERSON_VEHICLE (
    PERSON_ID integer, 
    VEHICLE_ID integer not null, 
    primary key (VEHICLE_ID) 
) 

alter table PERSON_VEHICLE 
    add index FK_h3d046x5uvbo53p8ms41hwqx (PERSON_ID), 
    add constraint FK_h3d046x5uvbo53p8ms41hwqx 
    foreign key (PERSON_ID) 
    references Person (PERSON_ID) 

alter table PERSON_VEHICLE 
    add index FK_mtm2mn29hel3lbpl6i526w40v (VEHICLE_ID), 
    add constraint FK_mtm2mn29hel3lbpl6i526w40v 
    foreign key (VEHICLE_ID) 
    references Vehicle (VEHICLE_ID) 

VEHICLE表没有PERSON_ID列。有什么不对,但我找不到问题所在。

+0

我没有在这里看到person_vehicle连接表的需要。车辆应该只有一个人的领域。 – dsas 2015-01-26 22:24:04

+0

您应该在车辆表中加入连接表或person_id列,而不是两者。否则,同样的关系会被表示两次 - 如果它出现不一致,你会怎么做? – lmm 2015-01-26 22:28:54

回答

2

oneToMany关系不需要连接表。只有两个表Person和Vehicle足以用于此映射。有关详细示例,请参见This Example

+0

所以一个连接表只需要多对多的关系,对吧? – user2953113 2015-01-26 23:10:03

+0

是的。你是对的。接受ans会帮助:) – javafan 2015-01-26 23:17:46