Cannot save multiple orders on one customer

32 Views Asked by At

I have created a Customer entity class as well as an Order entity class! I have mapped the two as One-To-Many and Many-To-One bi-directional! I have set the CascasedType on both classes to REFRESH, PERSIST, MERGE, AND DETACHED. I have not included CascaseType.DELETE! However when i am running my JUnit Test for "CanFindAllOrders", i am creating a Customer object and 3 Order object. I am then setting the customer on each order to the customer that i have just created! I am then using my OrderService instance to save the 3 orders, but it is only saving the first order! On the second order, i am getting an error that says "detached entity passed to persist"! hibernate SQL performed the insert on the customer as expected, then the insert for the first order, but for the insert on the second order, i am getting the detached entity error! Please see the code below! Any help would be truly appreciated!

Error:

detached entity passed to persist: com.yavaar.nosi.crm.entity.Customer

Customer Class:

@Entity
@Table(name = "customer")
public class Customer {

@OneToMany(mappedBy = "customer", cascade = {CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH}, fetch = FetchType.LAZY)
    private List<Order> orders;

}

Order Class:

@Entity
@Table(name = "customerorder")
public class Order {

@ManyToOne(cascade = {CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH}, fetch = FetchType.EAGER)
    @JoinColumns(
            {
                    @JoinColumn(updatable = true, insertable = true, name = "customer_id", referencedColumnName = "id"),
                    @JoinColumn(updatable = true, insertable = true, name = "first_name", referencedColumnName = "first_name"),
                    @JoinColumn(updatable = true, insertable = true, name = "last_name", referencedColumnName = "last_name")
            }
    )
    private Customer customer;

}

JUnit Test:

@Test
    void canFindAllOrders() {

        Customer customer = new Customer("John", "Doe","[email protected]",
                LocalDate.of(1987, 9, 3));
        Order order = new Order(LocalDate.of(2024, 01,02), new BigDecimal("100.00"),
                new BigDecimal("20.00"), new BigDecimal("120.00"));

        Order order1 = new Order(LocalDate.of(2023, 12,11), new BigDecimal("200.00"),
                new BigDecimal("40.00"), new BigDecimal("240.00"));
        Order order2 = new Order(LocalDate.of(2022, 9,01), new BigDecimal("300.00"),
                new BigDecimal("60.00"), new BigDecimal("360.00"));

        order.setCustomer(customer);
        order1.setCustomer(customer);
        order2.setCustomer(customer);

        orderService.saveOrder(order);
        orderService.saveOrder(order1);
        orderService.saveOrder(order2);

        List<Order> orders = orderService.findAllOrders();

        assertEquals(3, orders.size());


    }

I tried changing the cascading type but did not work! The error i keeping getting is detached entity passed to persist: com.yavaar.nosi.crm.entity.Customer

0

There are 0 best solutions below