第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Spring Boot mongo審計(jì)@version問題

Spring Boot mongo審計(jì)@version問題

手掌心 2022-01-12 10:14:30
我剛開始一個(gè)新項(xiàng)目,想使用 Sprint Boot 2.1,一開始就遇到了問題。我想做的是使用 Spring Boot Mongo 來管理數(shù)據(jù)庫。我想要一個(gè)帶有@Version注釋的樂觀鎖。但是,我發(fā)現(xiàn)它似乎@Version會(huì)影響save()MongoRepository 中的行為,這意味著 dup key 錯(cuò)誤。以下是示例代碼。POJO    @Data    @AllArgsConstructor    @NoArgsConstructor    @Document    public class Person {        @Id public ObjectId id;        @CreatedDate public LocalDateTime createOn;        @LastModifiedDate public LocalDateTime modifiedOn;        @Version public long version;        private String name;        private String email;        public Person(String name, String email) {            this.name = name;            this.email = email;        }       @Override        public String toString() {            return String.format("Person [id=%s, name=%s, email=%s, createdOn=%s, modifiedOn=%s, version=%s]", id, name, email, createOn, modifiedOn, version);        }    }MongoConfig    @Configuration    @EnableMongoRepositories("com.project.server.repo")    @EnableMongoAuditing    public class MongoConfig {    }存儲(chǔ)庫    public interface PersonRepo extends MongoRepository<Person, ObjectId> {        Person save(Person person);        Person findByName(String name);        Person findByEmail(String email);        long count();        @Override        void delete(Person person);    }如Official Doc 中所示,我的version字段位于 中l(wèi)ong,但 dup 鍵錯(cuò)誤發(fā)生在 second save,這意味著它insert再次嘗試,即使對(duì)象中的 id 也是如此。我也嘗試了Longinversion字段,它沒有發(fā)生 dup 鍵并按預(yù)期保存為更新,但createdOn成為null第一個(gè)save(這意味著insert)控制器Person joe = new Person("Joe", "aa@aa.aa");System.out.println(joe.toString());this.personRepo.save(joe);Person who = this.personRepo.findByName("Joe");System.out.println(who.toString());who.setEmail("bb@bb.bb");this.personRepo.save(who);Person who1 = this.personRepo.findByName("Joe");Person who2 = this.personRepo.findByEmail("bb@bb.bb");System.out.println(who1.toString());System.out.println(who2.toString());據(jù)我所知,spring 使用 id 存在作為保存行為控制,這意味著如果 id 存在,那么保存就像 mongo 的插入一樣。但是,在這里,版本似乎也會(huì)影響保存行為或影響spring識(shí)別id存在的方式。問題:如何將 MongoAudit 與 MongoRepository 一起使用?我犯了任何錯(cuò)誤/錯(cuò)誤嗎?
查看完整描述

2 回答

?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

對(duì)于使用@Version,您必須首先從數(shù)據(jù)庫中檢索數(shù)據(jù)模型,并且在更新數(shù)據(jù)后,您必須將相同的數(shù)據(jù)保存到數(shù)據(jù)庫中。例如:


  personRepo.findByName(name).ifPresent(person-> {

            person.setEmail("email@gamil.com");

            personRepo.save(person);

            log.info("Updated Data: {}", person);

        });

@CreatedDatenull如果您沒有將其添加@Version到您的模型類中,將永遠(yuǎn)如此。它適用于@Version


如果您沒有添加@Version到模型類并且您嘗試使用具有模型類來更新相同的模型類@Version,那么這里還要添加一點(diǎn),它會(huì)再次給您重復(fù) id 錯(cuò)誤。


查看完整回答
反對(duì) 回復(fù) 2022-01-12
?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

我仍然無法弄清楚問題所在。但是,即使我的設(shè)置與上面的帖子完全相同,由于我將 Spring Boot 從 2.1.0 升級(jí)到 2.1.1,現(xiàn)在一切正常(無論我使用什么類型的版本,Long/long)


以下是我現(xiàn)在正在使用的庫版本。


spring-boot-starter-data-mongodb:2.1.1.RELEASE:

  -> spring-data-mongo:2.1.3.RELEASE

  -> mongodb-driver:3.8.2



查看完整回答
反對(duì) 回復(fù) 2022-01-12
  • 2 回答
  • 0 關(guān)注
  • 302 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)