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

GeneratedValue和Spring数据JPA更新

易琨
2023-03-14

我有一些实体类,其id配置如下

@Entity
public class PatientNote {
    @Id
    @GeneratedValue
    private Integer id;
CREATE TABLE patient_note (
    id int8 NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    created_date_time timestamp NOT NULL,
    created_by_user_id int8 NULL,
    note varchar(4000) NULL,
    patient_id int8 NOT NULL,
    CONSTRAINT patient_note_pkey PRIMARY KEY (id)
);

 public List<PatientNote> fromClientNoteToPatientNote(List<ClientNote> clientNoteList) {
        return clientNoteList.stream().map(clientNote -> {
            PatientNote patientNote = new PatientNote();
            patientNote.setCreatedDateTime(clientNote.getModifiedDateTime());
            patientNote.setNote(clientNote.getComments());
            patientNote.setCreatedByUserId(companyUserService.findUserByLogin(clientNote.getLoggedUser()));
            patientNote.setPatientId(patientProfileService.findByPartOfOldClientGuid(clientNote.getClientGuid()));
            return patientNote;
        }).collect(Collectors.toList()); 

@Scheduled(cron = "0 1 * * *")
public void doJob() {
List<PatientNote> patientNotes = patientNoteService.fromClientNoteToPatientNote(notesForClientFromOldProject);
patientNoteService.saveAll(patientNotes);
}
public List<ClientNote> getNotesForClientFromOldProject(Client client) {
        String url = "http://localhost:8080/note/getClientNotes?client_guid={clientGuid}&agency={agency}";
        ResponseEntity<List<ClientNote>> clientNoteResponse =
                restTemplate.exchange(url,
                        HttpMethod.GET, null, new ParameterizedTypeReference<List<ClientNote>>() {
                        }, client.getClientGuid(), client.getAgency());
        return clientNoteResponse.getBody();

接下来是我的问题。例如,第一天,我获取所有记录并保存它们。但是第二天我会再次得到所有的记录,包括第一天已经保存的记录。当我试着拯救第二天的时候会发生什么?是所有记录都将再次插入还是Spring数据只插入新记录,从第一天开始的旧记录将被更新?我需要第二种情况下的行为

共有1个答案

马泰
2023-03-14

Save和saveAll将始终向数据库插入新记录。

您将不得不手动执行筛选,可能是在patientGuid字段上,或者在模型中向其添加唯一约束,并捕获违反此约束时数据库将引发的异常。

 类似资料:
  • 我有一个使用JPA注释生成数据库主键的代码。一个数据库序列用于使用Oracle DB生成PK.Am 现在我对此的理解是:DB sequencer返回的sequence id作为rec_id。这是正确的吗? 医生说: 序列策略序列策略由两部分组成——定义命名序列和在一个或多个类的一个或多个字段中使用命名序列。@Sequence Generator注释用于定义序列并接受名称、初始值(默认值为1)和分配

  • 我是Spring data JPA的新手,正在尝试了解如何最好地将其与QueryDSL一起使用。如果没有QueryDSL,我就可以用@Query注释在SpringData接口中创建任何查询。 为了获得使用QueryDSL的相同体验,根据我所看到的,我需要创建我自己的自定义存储库实现并让我的repo接口扩展我的自定义实现接口,或者将我的所有QueryDSL查询放在包装我的repo的服务层。 在第一种

  • 和 和 我的存储库:

  • 嗨,我是Spring Data JPA的新手,我想知道即使我将Id传递给实体,Spring data jpa也是插入而不是合并的。我想当我实现持久接口并实现这两个方法时: 它将自动合并而不是持久化。 我有一个名为User like的实体类: 再上一节课 我有一个名为UserRepostory的自定义存储库,它扩展了JpaReopistory。当我看到实现演示SpringDataJpa使用以上两种方

  • 问题内容: 我必须在Hibernate,Jpa的应用程序(弹簧)中使用两个不同的数据库。我想直接将不同的表定义为不同的数据源。所以我使用两个不同的持久性单元,然后尝试使用 和 将不同的表放入不同的包中。但这不起作用。用第一个数据源来影响所有表。然后我尝试将诸如类的名称写入持久性XML文件 和it.two.app.domain.second.OtherTable 但是,当我运行Log时,说表’fir

  • 我有两个实体。父母和孩子。 儿童知识库。JAVA 我试图通过标准找到子实体,它应该总是有父实体。 我得到一个例外,它试图在地址表中找到parentObj。 我找到了这个链接,并尝试了Joep给出的解决方案,但出现了相同的错误。 Spring数据JPA JpaSpecificationExecator EntityGgraph 我错过了什么。我无法理解为什么/如何在just Child对象中查找pa