Jak ja to widzę :
@Entity
public class Producer {
@Id
@GeneratedValue
long id;
String name;
@OneToMany(mappedBy="producer", cascade=CascadeType.ALL, orphanRemoval=true)
List<Product> products;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
}
@Entity
public class Product {
@Id
@GeneratedValue
long id;
String name;
@ManyToOne
@JoinColumn
Producer producer;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Producer getProducer() {
return producer;
}
public void setProducer(Producer producer) {
this.producer = producer;
}
}
Jak widać nadrzędnym obiektem jest Producer i to w nim ustawiasz Products (w liście), żeby działały zależności w prosty sposób :
Tworzysz Producera oraz listę Products. W Producer ustawiasz listę Products i są ustawione zależności. Jeśli usuniesz danego Producera to po ustawieniu Cascade.ALL usunie również Products przypisane do Producera. Jak chcesz inaczej to zrobić?
Możesz tworzyć oddzielnie Products jeśli Producer_id może przyjmować wartości null inaczej się to nie uda i potem dodać je do Producera poprzez ustawienie listy.
//Nie jestem w tym biegły - cały czas się uczę, więc to tylko sugestia