无法为一位客户保存多个订单

问题描述 投票:0回答:1

我创建了一个 Customer 实体类以及 Order 实体类!我已将两者映射为一对多和多对一双向!我已将两个类的 CascasedType 设置为

REFRESH
PERSIST
MERGE
DETACHED
。我没有包含 CascaseType.DELETE!但是,当我运行“CanFindAllOrders”的 JUnit 测试时,我正在创建一个 Customer 对象和 3 个 Order 对象。然后,我将每个订单上的客户设置为我刚刚创建的客户!然后,我使用 OrderService 实例保存 3 个订单,但它只保存第一个订单!在第二个订单中,我收到一个错误,提示“分离的实体已传递到持久化”! hibernate SQL 按预期对客户执行插入,然后执行第一个订单的插入,但对于第二个订单的插入,我收到分离实体错误!请看下面的代码!任何帮助将不胜感激!

错误:

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

客户类别:

@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;

}

订购类别:

@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
    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());


    }

我尝试更改级联类型,但没有成功!我不断收到的错误是传递给持久化的分离实体:com.yavaar.nosi.crm.entity.Customer

spring spring-boot spring-data-jpa spring-data hibernate-mapping
1个回答
0
投票

先尝试拯救客户:

@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"));
   
    // save costumer
    Customer savedCustomer = customerRepository.save(customer)
    order.setCustomer(savedCustomer);
    order1.setCustomer(savedCustomer);
    order2.setCustomer(savedCustomer);

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

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

    assertEquals(3, orders.size());


}
© www.soinside.com 2019 - 2024. All rights reserved.