detached entity passed to persist – springboot

huangapple go评论107阅读模式
英文:

detached entity passed to persist - springboot

问题

销售订单保存对于现有客户不起作用,但对于新客户起作用

  1. @Entity
  2. @Table(name = "sales_order")
  3. @EntityListeners(AuditingEntityListener.class)
  4. public class SalesOrder extends Auditable<String> implements Serializable {
  5. private static final long serialVersionUID = 1L;
  6. @Id
  7. @GeneratedValue(strategy = GenerationType.IDENTITY)
  8. private Long id;
  9. @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  10. @JoinColumn(name = "customer_id", nullable = false)
  11. private Customer customer;
  12. @Entity
  13. @Table(name = "customer")
  14. @EntityListeners(AuditingEntityListener.class)
  15. public class Customer extends Auditable<String> implements Serializable {
  16. private static final long serialVersionUID = 1L;
  17. @Id
  18. @GeneratedValue(strategy = GenerationType.IDENTITY)
  19. private Long id;
  20. @OneToOne(mappedBy = "customer", cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
  21. private SalesOrder salesOrder;
  1. SalesOrder salesOrder = new SalesOrder();
  2. Branch branch = BranchContextHolder.getCurrentBranch();
  3. String nextSequence = null;
  4. if (salesOrderDto.getId() == null) {
  5. salesOrder = new SalesOrder(salesOrderDto);
  6. salesOrder.setBranch(branch);
  7. if (customerRepository.existsByPhone(salesOrderDto.getCustomer().getPhone())) {
  8. Customer customer = customerRepository.findCustomerByPhone(salesOrderDto.getCustomer().getPhone());
  9. customer.setSalesOrder(salesOrder);
  10. salesOrder.setCustomer(customer);
  11. }
  12. nextSequence = sequenceService.getNextSequence(branch.getId(), module.getId());
  13. salesOrder.setUid(nextSequence);
  14. }
  15. // 保存销售订单
  16. salesOrder = salesOrderRepository.save(salesOrder);

在保存时出现错误:

  1. detached entity passed to persist: com.jee.cms.app.customer.model.Customer; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.jee.cms.app.customer.model.Customer

我漏掉了什么吗?

英文:

Sales Order save not working for existing Customer but working for new Customer

  1. @Entity
  2. @Table(name = &quot;sales_order&quot;)
  3. @EntityListeners(AuditingEntityListener.class)
  4. public class SalesOrder extends Auditable&lt;String&gt; implements Serializable {
  5. private static final long serialVersionUID = 1L;
  6. @Id
  7. @GeneratedValue(strategy= GenerationType.IDENTITY)
  8. private Long id;
  9. @OneToOne(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
  10. @JoinColumn(name = &quot;customer_id&quot;, nullable = false)
  11. private Customer customer;
  12. @Entity
  13. @Table(name = &quot;customer&quot;)
  14. @EntityListeners(AuditingEntityListener.class)
  15. public class Customer extends Auditable&lt;String&gt; implements Serializable {
  16. private static final long serialVersionUID = 1L;
  17. @Id
  18. @GeneratedValue(strategy= GenerationType.IDENTITY)
  19. private Long id;
  20. @OneToOne(mappedBy=&quot;customer&quot;,cascade={CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST,CascadeType.REFRESH})
  21. private SalesOrder salesOrder;
  1. SalesOrder salesOrder = new SalesOrder();
  2. Branch branch = BranchContextHolder.getCurrentBranch();
  3. String nextSequense = null;
  4. if(salesOrderDto.getId()==null) {
  5. salesOrder = new SalesOrder(salesOrderDto);
  6. salesOrder.setBranch(branch);
  7. if(customerRepository.existsByPhone(salesOrderDto.getCustomer().getPhone())) {
  8. Customer customer = customerRepository.findCustomerByPhone(salesOrderDto.getCustomer().getPhone());
  9. customer.setSalesOrder(salesOrder);
  10. salesOrder.setCustomer(customer);
  11. }
  12. nextSequense = sequenceService.getNextSequense(branch.getId(),module.getId());
  13. salesOrder.setUid(nextSequense);
  14. }
  15. //save sales order
  16. salesOrder = salesOrderRepository.save(salesOrder);

On save getting error:

  1. detached entity passed to persist: com.jee.cms.app.customer.model.Customer; nested exception is org.hibernate.PersistentObjectException: detached entity passed to persist: com.jee.cms.app.customer.model.Customer

Anything I am missing?

答案1

得分: 1

尝试使用@Transactional注解您的方法。然后,Customer在方法内部将不会变为游离状态。

英文:

Try annotating your method with @Transactional. Then then Customer won't get detached within the method.

答案2

得分: 0

这种类型的错误是因为具有相同的id(@id列值)的多个条目被找到而引发的。

英文:

This type of error arise when more then one entry found with same id (@id column value) .

huangapple
  • 本文由 发表于 2023年1月8日 22:49:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/75048705.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定