Как я могу использовать spring-data-jpa mongoRepository для запроса и обновления? - PullRequest
0 голосов
/ 27 февраля 2020

Вот моя сущность

@Document(collection = "deviceConfig")
@Data
@Builder
public class DbDeviceConfig {
    private ObjectId _id;

//    @Field("id")
//    @Id
//    private String id;

    private String deviceId;

    private String enterpriseId;


    private Integer state;


    private String cfgKey;


    @JsonSerialize
    private String cfgValue;


    private Long cfgDate;


    private Long reportDate;


    private Integer reportCode;


    private String reportMsg;
}

Как видите, я замечаю @ Id
, поскольку в моей ситуации у каждого устройства будет только одно значение cfgValue, заданное c cfgKey
, поэтому enterpriseId, deviceId и cfgKey сохранят его уникальным
я написал обновление mongotemplate sql

Query updateQuery = new Query(Criteria.where("enterpriseId").is(enterpriseId)
                    .and("cfgKey").is(batchAddDeviceConfig.getCfgKey())
                    .and("deviceId").is(deviceId));
            Update update = new Update();
            update.set("cfgDate", System.currentTimeMillis());
            update.set("cfgValue", batchAddDeviceConfig.getCfgValue());
            update.set("state", batchAddDeviceConfig.getState());
            dataMongoTemplate.upsert(updateQuery, update, DbDeviceConfig.class, "deviceConfig");

, но я не знаю, как написать соответствующий jpa-код соответствующей пружины
или, возможно, мне следует добавить Business Id?
Я действительно сбит с толку, поскольку mongodb уже создал ObjectId

Я также ищу решение других людей
Кажется, я могу использовать этот способ

@Modifying
@Query("UPDATE Space c SET c.owner = :name WHERE c.id = :id")
Integer setNameForId(@Param("name") String name, @Param("id")

но это было бы как много параметров
, пожалуйста, помогите мне QAQ

1 Ответ

1 голос
/ 27 февраля 2020

Если вы используете Spring Data JPA, то вы можете извлечь объект из базы данных, используя методы repository.findBy....(), установить обновленные значения в выбранном объекте и затем вызвать repository.save(entity) для него. Hibernate позаботится об этом и обновит вашу сущность. Однако он сгенерирует запрос на обновление для всех полей. Если вы хотите обновить только измененные поля, вы можете использовать @DynamicUpdate в своем классе сущности.

...