This is my annotation I use to generate my Join Table.
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = \"service_operations\",
joinColumns
I fixed my problem by adding the following changes:
I changed my @OneToMany to a @ManyToMany annotation
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "workflow_services",
joinColumns = @JoinColumn(name = "workflow_id"),
inverseJoinColumns = @JoinColumn(name = "service_id"))
public Set<Service> getServices() {
return services;
}
I added a Set workflows; association in my Service object
@ManyToMany(mappedBy="services") // map info is in person class
public Set<Workflow> getWorkflows() {
return workflows;
}
This looks correct to me. Each row in the join table should identify a pair of workflow/service items. So (workflow_id, service_id)
should be the primary key. Also workflow_id
should be a foreign key into the workflow
table and service_id
should be a foreign key into the service
table.
Also note that a one-to-many association between A and B does not mean that an instance of A can have the same instance of B multiple times, rather an instance of A can have multiple distinct instances of B. For example a blog Post
entity can have a one-to-many association with a Tag
entity. This means that a blog Post
P1 can have multiple tags Java
, JPA
, JavaEE
, but can not have the same tag multiple times.