[Spring Data MongoDB]學習筆記--_id和類型映射

來源:互聯網
上載者:User

標籤:style   blog   color   java   使用   io   cti   div   

_id欄位的映射:

MongoDB要求所有的document都要有一個_id的欄位。

如果我們在使用中沒有傳入_id欄位,它會自己建立一個ObjectId.

{ "_id" : ObjectId("53e0ff0b0364cb4a98ce3bfd"), "_class" : "org.springframework.data.mongodb.examples.hello.domain.Person", "name" : "John", "age" : 39, "accounts" : [ { "_id" : null, "accountNumber" : "1234-59873-893-1", "accountType" : "SAVINGS", "balance" : 123.45 } ] }

MongoMappingConverter按照下面的規則將java class對應到_id欄位:

1. 被標記為@Id (org.springframework.data.annotation.Id) 的欄位或者屬性。

2. 沒有標記,但是名字是id的欄位或者屬性(類型為string或者BigInteger)。

 

類型映射

如果一個object中包含另一個object,預設存放在_class欄位下,例如

public class Sample {  Contact value;}public abstract class Contact { … }public class Person extends Contact { … }Sample sample = new Sample();sample.value = new Person();mongoTemplate.save(sample);{ "_class" : "com.acme.Sample",  "value" : { "_class" : "com.acme.Person" }}

通過使用@TypeAlias可以把在_class下面存放的值變成固定的值,下面的例子為pers。

@TypeAlias("pers")class Person {}

 

定義自己的MongoTypeMapper

1. 使用java config

class CustomMongoTypeMapper extends DefaultMongoTypeMapper {  //implement custom type mapping here}
@Configurationclass SampleMongoConfiguration extends AbstractMongoConfiguration {    @Override    protected String getDatabaseName() {        return "database";    }    @Override    public Mongo mongo() throws Exception {        return new Mongo();    }    @Bean    @Override    public MappingMongoConverter mappingMongoConverter() throws Exception {        MappingMongoConverter mmc = super.mappingMongoConverter();        mmc.setTypeMapper(customTypeMapper());        return mmc;    }    @Bean    public MongoTypeMapper customTypeMapper() {        return new CustomMongoTypeMapper();    }}

2. 使用xml

<mongo:mapping-converter type-mapper-ref="customMongoTypeMapper"/><bean name="customMongoTypeMapper" class="com.bubu.mongo.CustomMongoTypeMapper"/>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.