Your mapping is wrong. In Component, you're saying that the association between Component and Task is mapped by a join table.
And in Task, you're saying that the same association is mapped by a join column in the Task table.
Make up your mind. If the association is a OneToMany bidirectional association, a join table is usually not necessary, and you just need
@OneToMany(cascade = CascadeType.ALL, mappedBy = "component")
public List<Task> getTasks() {
return tasks;
}
and
@ManyToOne
@JoinColumn(name = "ComponentID")
public Component getComponent() {
return component;
}