Хранилище Jpa Spring Data не сохраняет объекты в базе данных

#java #spring-data-jpa #spring-data

Вопрос:

У меня возникли некоторые трудности с использованием jpa. Я не получаю никаких исключений, но я не могу ничего сохранить в базе данных. Я перешел из спящего режима в Jpa, и там все работало идеально. Ниже приведены мои файлы

применение.свойства:

 logging.level.org.springframework.web=DEBUG logging.level.ch.generali=DEBUG logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type=TRACE  spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=postgres spring.datasource.password=1234 spring.datasource.url=jdbc:h2:mem:party;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL spring.jpa.hibernate.ddl-auto=update  

Модель:

 @Getter @Setter @Builder public class NewClientFormWrapper {  //Entity  NaturalPerson person;  //Entity  Address[] addresses;  //Entity  CommunicationChannel[] communicationChannels;  }  

Хранилище:

 public interface NaturalPersonRepository extends JpaRepositorylt;NaturalPerson, Integergt; {   Optionallt;Listlt;NaturalPersongt;gt; getNaturalPersonByFirstname(String inputFirstname);   Optionallt;NaturalPersongt; getNaturalPersonById(int id);   void deleteNaturalPersonById(int id);  }  

Обслуживание:

 @RestController @RequestMapping("/partner") public class PartnerService {  @Autowired NaturalPersonRepository naturalPersonRepository;  @PostMapping(value = "/client") @Transactional public ResponseEntitylt;NewClientFormWrappergt; newClient(@RequestBody @Valid NewClientFormWrapper  request) {   request.getPerson().setAddresses(Arrays.asList(request.getAddresses()));  request.getPerson().setCommunicationChannels(Arrays.  asList(request.getCommunicationChannels()));  NaturalPerson naturalPerson = naturalPersonRepository.save(request.getPerson());   NewClientFormWrapper response = NewClientFormWrapper.builder()  .person(naturalPerson)  .addresses(naturalPerson.getAddresses().toArray(new Address[0]))  .communicationChannels(naturalPerson.getCommunicationChannels().toArray(new   CommunicationChannel[0]))  .build();  return ResponseEntity.ok(response);  }  }  

Я получаю ответ 200 при отправке формы, но не могу найти данные в базе данных

Комментарии:

1. Вы ищете данные в где?

2. в базе данных вы видите, что я создал пользовательский интерфейс с таблицей, в которой отображаются все пользователи, после того как я ее создам, я смогу видеть пользователя в таблице, но не в базе данных

Ответ №1:

Вы используете базу данных времени выполнения(H2), поэтому при вызове API данные отображаются из памяти. Никакие данные не сохраняются в реальной базе данных. Чтобы сохранить данные в реальной базе данных, вам необходимо задать следующие свойства с фактическим URL-адресом базы данных и драйвером

 spring.datasource.url=jdbc:h2:mem:party;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL spring.datasource.driver-class-name=org.h2.Driver  

Комментарии:

1. Сработало! Поскольку я использую postgres, я также сменил драйвер на postgres.