内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

spring-data-mongodb使用mongoTemplate操作mongoDb時(shí)@Indexed注解無(wú)效且沒(méi)有自動(dòng)創(chuàng)建索引該怎么辦

這篇文章給大家介紹spring-data-MongoDB使用mongoTemplate操作mongoDb時(shí)@Indexed注解無(wú)效且沒(méi)有自動(dòng)創(chuàng)建索引該怎么辦,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為索縣等服務(wù)建站,索縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為索縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

先上代碼 ,下面的 “異常” 代碼是否會(huì)自動(dòng)創(chuàng)建索引呢?

//訂單doc
@Data
@Accessors(chain = true)
@FieldNameConstants
@Document(collection = "order_")
public class Order implements Serializable {

    @Id
    private String id;
    @Indexed
    private String tid;
    @Indexed
    private String tradeId;
    private String status;
    private String created;

}

//使用mongoTemplate做插入操作,按照月份分表

mongoTemplate.insert(orderRecord, mongoTemplate.getCollectionName(Order.class) + month);

答案是 :會(huì)的!

那為什么說(shuō)是異常代碼呢,因?yàn)樗鼪](méi)有達(dá)到我的預(yù)期,這段代碼會(huì)有兩個(gè)問(wèn)題:

    1、會(huì)在mongodb里邊創(chuàng)建兩個(gè) collection : order_ 和 order_${month}

    2、索引會(huì)創(chuàng)建在 “order_” 這個(gè)collection里邊,而不會(huì)在 “order_${month}”

這個(gè)時(shí)候答案就很明顯了:自動(dòng)創(chuàng)建索引的時(shí)候 ,讀取的collectionName 是 @Document注解里邊的值,而不是 insert的時(shí)候傳入的值。

結(jié)論已經(jīng)有了,就該看看它是怎么把傳入的 collectionName弄丟的了

    通過(guò)debug可以找到創(chuàng)建索引相關(guān)類(lèi)以及方法的調(diào)用路徑:

spring-data-mongodb使用mongoTemplate操作mongoDb時(shí)@Indexed注解無(wú)效且沒(méi)有自動(dòng)創(chuàng)建索引該怎么辦

這個(gè)是方法簽名:

checkForIndexes((MongoPersistentEntity<?>) entity);

最終只剩下了entity。通過(guò)entity的@Document注解來(lái)獲取collectionName。細(xì)節(jié)就不貼圖了,建議去debug下看看源碼。

原因找到了,最終要如何解決當(dāng)前的問(wèn)題呢?上代碼:

        //字段索引
        IndexOperations indexOps2 = mongoTemplate.indexOps(orderCollectionName);
        String[] indexFields2 = Arrays.stream(Order.class.getDeclaredFields())
                .filter(f -> f.isAnnotationPresent(Indexed.class))
                .map(Field::getName)
                .toArray(String[]::new);
        for (String indexField : indexFields2) {
            if (StringUtils.hasText(indexField)) {
                indexOps2.ensureIndex(new Index(indexField, Sort.Direction.ASC));
            }
        }

至此,問(wèn)題解決。

最后別忘了把@Document注解去掉。

關(guān)于spring-data-mongodb使用mongoTemplate操作mongoDb時(shí)@Indexed注解無(wú)效且沒(méi)有自動(dòng)創(chuàng)建索引該怎么辦就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章題目:spring-data-mongodb使用mongoTemplate操作mongoDb時(shí)@Indexed注解無(wú)效且沒(méi)有自動(dòng)創(chuàng)建索引該怎么辦
轉(zhuǎn)載源于:http://m.rwnh.cn/article38/jdijsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站策劃關(guān)鍵詞優(yōu)化、Google、商城網(wǎng)站品牌網(wǎng)站設(shè)計(jì)

廣告

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

微信小程序開(kāi)發(fā)
油尖旺区| 阿克陶县| 高密市| 林口县| 聂拉木县| 富锦市| 稻城县| 九龙城区| 霞浦县| 霍州市| 定陶县| 万荣县| 绥阳县| 郸城县| 义马市| 陕西省| 徐汇区| 宝兴县| 上杭县| 大埔县| 佳木斯市| 五华县| 沙河市| 黄浦区| 鄂温| 宁蒗| 安塞县| 钟山县| 揭西县| 呼和浩特市| 东平县| 棋牌| 永德县| 会泽县| 当雄县| 讷河市| 江山市| 香河县| 东兰县| 五家渠市| 新丰县|