0

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

javax
  • 15
  • 3

0 Answers0