当前位置: 首页 > 知识库问答 >
问题:

Spring Data Jpa存储库不将实体保存到数据库

阎承
2023-03-14

我在使用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的响应,但在数据库中找不到数据

共有1个答案

柳杰
2023-03-14

您使用的是运行时数据库(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
 类似资料:
  • 我有一个使用JPA的Spring Boot应用程序,它有两个数据源,一个用于DB2,一个用于SQL Server。 当我尝试将实体保存到SQL Server时,不会抛出任何错误,但该实体不会持久化到数据库。我看不到日志中正在生成插入。 提前感谢 下面是我尝试保存实体所执行的代码@组成部分 下面是sql Server配置。 这是SQL Server存储库 公共接口BeercupMessageLogR

  • 我是Hibernate的新手,并要求使用具有这些列的表的数据库 表:TBL _ product//库存项目列表< br >列:< br > key _ product < br > key _ category < br > fld _ product _ name < br > fld _ Inventory _ qty < br > fld _ unit _ price < br > fld

  • 我正在尝试开发一个小型电子商务项目。我有一个篮子和篮子项目实体。我只是想当我为客户保存购物篮时,我想把购物篮项目保存在数据库中。我认为我不应该为篮子项目创建存储库。我应该能够保存篮子项目,同时使用篮子存储库保存篮子。 在这里,我试图通过篮子服务获得一个篮子项目,并将其设置为篮子实体并保存它。 我有什么问题?我有个例外。

  • 问题内容: 有人可以告诉我,在以下情况下如何进行? 接收文件(MS文件,ODS,PDF) 通过Apache Tika提取公元核心元数据+通过jackrabbit-content-extractors提取内容 使用Jackrabbit将文档(内容)及其元数据存储到存储库中 ? 检索文档+元数据 我对第3点和第4点感兴趣… 详细信息:该应用程序正在以交互方式处理文档(一些分析-语言检测,单词计数等。+

  • 我已经做了几个小时了,似乎找不到问题所在。 下面是我的数据库模式: 这是我的课程: 这是我的任务类: 因此,我的H2数据库结构如下: 我试图通过Rest控制器给学生添加一个任务(Rest控制器工作正常): 这是我的类: 以下是代码中的日志: 如你所见,任务似乎确实被添加到数据库中——除了它没有:( ☝️ 应该有一个“4,3”(4是任务id,3是学生“编号”)。 哦,当我在做的时候,这是我的类: 我

  • 我创造了一个实体。我想写一个RestController来在MySQL中保存这个实体和一个图像。我使用了Java8、SpringBoot、Hibernate、Rest API、JSON。我该怎么做呢?我可以一起保存吗? 控制器