I want to write tests for my entities and I came across issue. The issue is that when I want to save different carts that contains the same user I get detached entity error. I read about changing cascade persist to merge but either I cannot do it or its not the case because when I use single persist cascade in my cart class the detached exception is thrown, when I use merge the unsaved transient exception is thrown. When I use both, detached excpetion. Can anybody explain this for me, please?
My test:
@Test
public void testRetrieveAllOrders() {
// Given
User user = new User("John","Smith");
Cart cart1 = new Cart(user);
Cart cart2 = new Cart(user);
Cart cart3 = new Cart(user);
Order order1 = new Order(cart1, OrderStatus.CREATED);
Order order2 = new Order(cart2, OrderStatus.CREATED);
Order order3 = new Order(cart3, OrderStatus.CREATED);
orderRepository.save(order1);
orderRepository.save(order2);
orderRepository.save(order3);
// When
List<Order> savedOrders = (List<Order>) orderRepository.findAll();
// Then
assertEquals(3,savedOrders.size());
orderRepository.deleteById(order1.getId());
orderRepository.deleteById(order2.getId());
orderRepository.deleteById(order3.getId());
}
User Relation:
@OneToMany(targetEntity = Cart.class,
mappedBy = "user",
cascade = CascadeType.ALL,
fetch = FetchType.LAZY
)
private List<Cart> carts = new ArrayList<>();
Cart relation:
@ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
@NotNull
@JoinColumn(name = "USER_ID")
private User user;
Exception:
detached entity passed to persist: com.project.ecommercee.domain.User; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.project.ecommercee.domain.User org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist: com.project.ecommercee.domain.User; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.project.ecommercee.domain.User