user2953113
user2953113

Reputation: 569

OneToMany bidirectional association example

I'm new to Hibernate and I'm trying to establish a OneToMany/ManyToOne bidirectional relationship between Person and Vehicle classes. In my example a Person can have many Vehicles and a Vehicle belongs to only one Person. I need a join table: PERSON_VEHICLE with PERSON_ID and VEHICLE_ID as columns and a PERSON_ID column in VEHICLE table. Here's my class design:

Person class:

@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<>();

Vehicle class:

@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", joinColumns=@JoinColumn(name="VEHICLE_ID"),
inverseJoinColumns=@JoinColumn(name="PERSON_ID"))
private Person person;

Here are the DDLs generated by Hibernate.

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)

The VEHICLE table doesn't have PERSON_ID column. Something is wrong but I cannot find what the problem is.

Upvotes: 0

Views: 501

Answers (1)

javafan
javafan

Reputation: 1539

Join table is not required for oneToMany relationship. Only two tables Person and Vehicle is sufficient for this mapping. For detailed example, see This Example

Upvotes: 2

Related Questions