欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Mongodb用String自定義ID

本篇內(nèi)容主要講解“MongoDB用String自定義ID”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Mongodb用String自定義ID”吧!

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、沂水ssl等。為成百上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的沂水網(wǎng)站制作公司

import org.bson.Document;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;
import org.springframework.stereotype.Component;

@Component
public class BeforeConvertListener extends AbstractMongoEventListener<Object> {
    @Override
    public void onBeforeSave(BeforeSaveEvent<Object> event) {
        Document d = event.getDocument();
        if(d==null){  //不太可能
            return;
        }
        Object _id = d.get("_id");
        if (_id == null) {
            event.getDocument().put("_id", new ObjectId().toString());
        } else if (_id instanceof ObjectId) {
            event.getDocument().put("_id", _id.toString());
        }
    }
}

通過監(jiān)聽器 , 保存的時(shí)候,把 ObjectId 類型的id都轉(zhuǎn)成 Stirng, 如果是空的,就自己加一個(gè)String類型的id.

But 有一個(gè)問題, 查詢,或者刪除的時(shí)候, 如果String 字符串是一個(gè)合法的 ObjectId 的形式。 Spring Data Mongo 會自動轉(zhuǎn)成 ObjectId 去查詢或刪除。

這樣就找不到記錄了。

https://stackoverflow.com/questions/14329175/prevent-spring-data-for-mongo-to-convert-ids-to-objectid

這里介紹的一個(gè)方式是 拋異常, 還沒試過。 看著拋異常就不太想用。 

public class CustomMongoConverter extends MappingMongoConverter {
    public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) {
        super(mongoDbFactory, mappingContext);
        conversionService.addConverter(new Converter<String, ObjectId>() {
            @Override
            public ObjectId convert(String source) {
                throw new RuntimeException();
            }
        });
    }
}

還沒結(jié)束, 估計(jì)要放棄的節(jié)奏,就用 ObjectId 當(dāng)主鍵。 

import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import org.bson.Document;
        import org.bson.types.ObjectId;
        import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
        import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
        import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;
        import org.springframework.stereotype.Component;

@Component
public class BeforeConvertListener extends AbstractMongoEventListener<Object> {
    @Override
    public void onBeforeSave(BeforeSaveEvent<Object> event) {
        Document d = event.getDocument();
        if(d==null){  //不太可能
            return;
        }
        Object _id = d.get("_id");
        if (_id == null) {
            event.getDocument().put("_id", UUID.fastUUID().toString()/*StrUtil.reverse(new ObjectId().toString())*/);
        } else if (_id instanceof ObjectId) {
            event.getDocument().put("_id",  UUID.fastUUID().toString()/* StrUtil.reverse(_id.toString())*/);
        }
    }
}

之前一個(gè)項(xiàng)目用了 ObjectId ,感覺沒啥用。 還容易出錯(cuò)。 比如前臺傳的String, 查詢的時(shí)候忘記轉(zhuǎn)為 ObjectId了...

最后,反正是不用 ObjectId了, 只要 String 不符合 ObjectId spring 就不會自動轉(zhuǎn)換, 建議就用 UUID字符串 替代。這樣查詢刪除也沒問題。

或者加一個(gè)字符串,改變長度就行。

 Object _id = d.get("_id");
        if (_id == null) {
            event.getDocument().put("_id", new ObjectId().toString()+"c");
        } else if (_id instanceof ObjectId) {
            event.getDocument().put("_id",  _id.toString()+"c");
        }

debug看一下, 他這個(gè)轉(zhuǎn)換的判斷邏輯是啥,

判斷邏輯就是是不是合法的 ObjectId.

Mongodb用String自定義ID

到此,相信大家對“Mongodb用String自定義ID”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享題目:Mongodb用String自定義ID
標(biāo)題URL:http://chinadenli.net/article30/jggeso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)Google、自適應(yīng)網(wǎng)站ChatGPT、響應(yīng)式網(wǎng)站網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
日本理论片午夜在线观看| 亚洲一区二区三区四区性色av| 亚洲专区中文字幕在线| 亚洲中文字幕高清乱码毛片| 久久精品中文扫妇内射| 精品欧美在线观看国产| 夫妻性生活真人动作视频 | 久久精品亚洲欧美日韩| 老司机激情五月天在线不卡| 国产一级片内射视频免费播放| 亚洲av成人一区二区三区在线| 亚洲视频在线观看免费中文字幕| 国产精品不卡高清在线观看| 男女午夜福利院在线观看| 国产偷拍盗摄一区二区| 日韩性生活片免费观看| 九九九热视频免费观看| 国产水滴盗摄一区二区| 日本久久中文字幕免费| 中文字幕久热精品视频在线| 国产精品一级香蕉一区| 日本丁香婷婷欧美激情| 少妇福利视频一区二区| 成人欧美一区二区三区视频| 东京不热免费观看日本| 国产一级内片内射免费看| 欧美乱妇日本乱码特黄大片| 日本一区二区三区黄色| 国产丝袜极品黑色高跟鞋| 国产精品香蕉在线的人| 色婷婷在线视频免费播放| 国产精品视频第一第二区| 自拍偷女厕所拍偷区亚洲综合| 国产三级黄片在线免费看| 欧美色婷婷综合狠狠爱| 99热在线精品视频观看| 欧美成人欧美一级乱黄| 国产对白老熟女正在播放| 日韩亚洲激情在线观看| 亚洲中文字幕综合网在线| 粉嫩一区二区三区粉嫩视频|