我是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列。有什么不对,但我找不到问题所在。
我没有在这里看到person_vehicle连接表的需要。车辆应该只有一个人的领域。 – dsas 2015-01-26 22:24:04
您应该在车辆表中加入连接表或person_id列,而不是两者。否则,同样的关系会被表示两次 - 如果它出现不一致,你会怎么做? – lmm 2015-01-26 22:28:54