Вот моя сущность
@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