Я использую JPA и хотел выяснить, как отношения «многие ко многим». Допустим, у меня есть «Магазин» и «Клиент». У них много отношений.JPA ManyToMany: Добавление существующего объекта к другому объекту
Так что я понимаю, что в Магазине может быть много Клиентов, а Клиент может быть связан со многими Магазинами. Поэтому я хотел бы создать две магазины и несколько клиентов. Затем я хотел, чтобы один и тот же клиент был частью Store 1 и Store 2. Однако, когда я сохранил Store 1 с клиентом, а затем взял того же клиента и связал его с Store 2 (скажем, магазины клиентов в обоих магазинах), Я получаю это сообщение об ошибке: удаленный объект передан для сохранения.
Не знаете, как это решить. Любая помощь и комментарии приветствуются. Заранее спасибо!
@Entity
public class Store {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
private List<Item> items = new ArrayList<>();
@ManyToMany(cascade=CascadeType.ALL)
private List<Customer> customers = new ArrayList<>();
public List<Customer> getCustomers() {
return customers;
}
public void setCustomers(List<Customer> customers) {
this.customers = customers;
}
public Store() {
}
public Store(String name) {
this.name = name;
}
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<Item> getItems() {
return items;
}
public void setItems(List<Item> items) {
this.items = items;
}
public Store addItem(Item item) {
items.add(item);
return this;
}
}
@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
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;
}
}
@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private BigDecimal price;
public Item() { }
public Item(String name, BigDecimal price) {
this.name = name;
this.price = price;
}
public Item() {
}
public Item(String name, BigDecimal price) {
this.name = name;
this.price = price;
}
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 BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}
Это код драйвера, используя Spring Ботинок: магазин Safeway = новый магазин ("Safeway4");
safeway.addItem(new Item("Fuji Apple", new BigDecimal(1)));
safeway.addItem(new Item("Black Grapes", new BigDecimal(2)));
safeway.addItem(new Item("Cheese Pizza", new BigDecimal(10)));
Store bestBuy = new Store("Best Buy4");
bestBuy.addItem(new Item("55 inch TV", new BigDecimal(550)));
bestBuy.addItem(new Item("Bluray Player", new BigDecimal(85)));
bestBuy.addItem(new Item("Nikon SLR", new BigDecimal(1500)));
Customer elf = new Customer();
elf.setName("Elf");
Customer neo = new Customer();
neo.setName("Neo");
safeway.getCustomers().add(elf);
safeway.getCustomers().add(neo);
Customer yoda = new Customer();
yoda.setName("Yoda");
Customer crazy = new Customer();
crazy.setName("Crazy");
bestBuy.getCustomers().add(yoda);
bestBuy.getCustomers().add(crazy);
log.debug("adding neo to best buy");
bestBuy.getCustomers().add(neo); // Adding Neo to both stores!
log.debug("saving safeway 1");
storeRepository.save(safeway);
log.debug("saving safeway 1 done");
log.debug("saving bestBuy 1");
storeRepository.save(bestBuy); // error happens here <-----------
log.debug("saving bestBuy 1 done");
Спасибо, Нарос! Ваш ответ устранил проблему. – Daniel