我创建了一个 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
先尝试拯救客户:
@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());
}