У меня есть четыре модели:EclipseLink (JPA) два @OneToMany для одного и того же объекта?
Public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "product_id")
private Long productId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product", fetch = FetchType.LAZY, orphanRemoval = true)
private List<Director> directorList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "product", fetch = FetchType.LAZY, orphanRemoval = true)
private List<Actor> actorList;
}
public class Actor {
@MapsId("peopleId")
@JoinColumn(name = "people_id", referencedColumnName = "PEOPLE_ID", insertable = true, updatable = true)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private People people;
@MapsId("productId")
@JoinColumn(name = "product_id", referencedColumnName = "product_id", insertable = true, updatable = true)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Product product;
}
public class Director {
@MapsId("peopleId")
@JoinColumn(name = "people_id", referencedColumnName = "PEOPLE_ID", insertable = true, updatable = true)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private People people;
@MapsId("productId")
@JoinColumn(name = "product_id", referencedColumnName = "product_id", insertable = true, updatable = true)
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Product product;
}
public class People {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "PEOPLE_ID")
private Long peopleId;
private String name;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "people", fetch = FetchType.LAZY)
private List<Director> directorList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "people", fetch = FetchType.LAZY)
private List<Actor> actorList;
}
Моя проблема здесь, когда я сохранить продукт с двумя списками, оба они содержат один и тот же человек имя и результат у меня есть две вставки в людях:
Product product = new Product();
People people = new People();
people.setName("John");
Director director = new Director();
director.setPeople(people);
product.getDirectorList().add(director);
Actor actor = new Actor();
actor.setPeople(people);
product.getActorList().add(actor);
dao.update(p);
Я тестировал изменение equals и hashcode лица, чтобы избежать дублирования, но не работает?
вы должны упорствовать людей, а затем добавить управляемый объект списки –
Я не могу вызывать какие-либо проблемы, кроме сохранения продукта, потому что объект содержит другое отношение. –
Вы пробовали это? Конечно, вы можете сохранить объект без каких-либо отношений.Процесс будет: упорствовать в людях -> упорствовать режиссером и актером с постоянными людьми -> обновлять людей с постоянным режиссером и актером –