Nano Hash - криптовалюты, майнинг, программирование

сохраните переходный экземпляр перед очисткой при сохранении объекта

Я пытаюсь сохранить объект MotoPayment. Но я должен проверить клиента с уже существующим кодом или нет перед сохранением объекта мотоплатежа.

public class MotoPaymentOrder extends BaseDocument {

    @ManyToOne
    @JoinColumn(name = "CUSTOMER")
    private Customer customer;

    @Column(name = "AMOUNT")
    private Double amount = Double.valueOf(0);

    @ManyToOne
    @JoinColumn(name = "PAYMENTSTATUS")
    protected SystemTypeLookupData status ;

    @Column(name = "PNRNO")
    private String pnrNo;

    @Column(name = "RESERVATIONNO")
    private String reservationNo;

}

метод контроллера

@RequestMapping(value = "/motopaymnetorder", method = RequestMethod.POST)
    @ResponseBody public MotoPaymentOrder create(@RequestBody MotoPaymentOrder domain){
        prepareCustomer(domain.getCustomer());
        return (MotoPaymentOrder) baseDocumentService.saveDocument(domain);
    }

Приведенный ниже метод используется для проверки существования клиента с кодом или отсутствия сохранения объекта клиента иным образом.

public void prepareCustomer(Customer customer){
        Customer existingCustomer = (Customer) appService.findOneWhere("WHERE o.code = '"+customer.getCode()+"'",Customer.class);
        if(existingCustomer==null){
            customer.setType(ApplicationConstants.CustomerType.Person);

            PersonCustomer personCustomer = new PersonCustomer();
            personCustomer.setEmail(customer.getCustomerEmail());
            personCustomer.setFirstName(customer.getPersonCustomer().getFirstName());
            personCustomer.setLastName(customer.getPersonCustomer().getLastName());
            personCustomer.setCustomer(customer);

            customer.setPersonCustomer(personCustomer);


        }
    }

Я получаю исключение ниже при сохранении объекта MotoPaymentOrder:

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.erp.hospitality.domain.MotoPaymentOrder.customer -> com.erp.core.domain.common.Customer
    at org.hibernate.engine.spi.CascadingActions$8.noCascade(CascadingActions.java:379)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:126)
    at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:150)
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:141)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:74)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:38)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1282)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1300)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

  • Хорошо для чтения. vladmihalcea.com/2015 /03/05/ 22.09.2017
  • попробуйте сохранить временный дочерний объект вручную, а затем установите его в родительский объект. 22.09.2017

Ответы:


1

Предположим, что для MotoPaymentOrder связанный Customer не сохраняется, JPA должен сохранять его, что не реализовано вашим подходом. Вы можете использовать CascadeType.REFRESH, чтобы указать hibernate, что делать с вашей сущностью, если она еще не сохранена.

@ManyToOne(cascade=CascadeType.REFRESH)
@JoinColumn(name = "CUSTOMER")
private Customer customer;
22.09.2017

2

См. здесь сохраните переходный экземпляр перед сбросом в приложении SpringBoot 2.0.4

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "CUSTOMER")
private Customer customer;
04.07.2020
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..