【问题标题】:Spring Data Jpa Repository not saving entities to databaseSpring Data Jpa Repository 未将实体保存到数据库
【发布时间】:2022-01-07 21:35:43
【问题描述】:

我在使用 jpa 时遇到了一些困难。我没有收到任何异常,但我无法将任何内容保存到数据库中。我从 Hibernate 转到 Jpa,那里一切正常。以下是我的文件

application.properties:

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 JpaRepository<NaturalPerson, Integer> {

    Optional<List<NaturalPerson>> getNaturalPersonByFirstname(String inputFirstname);

    Optional<NaturalPerson> getNaturalPersonById(int id);

    void deleteNaturalPersonById(int id);

}

服务:

@RestController
@RequestMapping("/partner")
public class PartnerService {

@Autowired
NaturalPersonRepository naturalPersonRepository;

@PostMapping(value = "/client")
@Transactional
public ResponseEntity<NewClientFormWrapper> 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 响应,但在数据库中找不到数据

【问题讨论】:

  • 您在哪里寻找数据?
  • 在数据库中,你看我创建了一个带有表的用户界面,所有用户都显示在其中,创建后我可以在表中看到用户,但在数据库中看不到跨度>

标签: java spring-data-jpa spring-data


【解决方案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

【讨论】:

  • 成功了!由于我使用的是 postgres,因此我还将驱动程序更改为 postgres。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
相关资源
最近更新 更多