spring-data-mongodb中的實體映射是通過MongoMappingConverter這個類實現的。它可以通過註釋把java類轉換爲mongodb的文檔。
它有以下幾種註釋:
@Id - 文檔的唯一標識,在mongodb中爲ObjectId,它是唯一的,通過時間戳+機器標識+進程ID+自增計數器(確保同一秒內產生的Id不會衝突)構成。
@Document - 把一個java類聲明爲mongodb的文檔,可以通過collection參數指定這個類對應的文檔。
@DBRef - 聲明類似於關係數據庫的關聯關係。ps:暫不支持級聯的保存功能,當你在本實例中修改了DERef對象裏面的值時,單獨保存本實例並不能保存DERef引用的對象,它要另外保存,如下面例子的Person和Account。
@Indexed - 聲明該字段需要索引,建索引可以大大的提高查詢效率。
@CompoundIndex - 複合索引的聲明,建複合索引可以有效地提高多字段的查詢效率。
@GeoSpatialIndexed - 聲明該字段爲地理信息的索引。
@Transient - 映射忽略的字段,該字段不會保存到mongodb。
@PersistenceConstructor - 聲明構造函數,作用是把從數據庫取出的數據實例化爲對象。該構造函數傳入的值爲從DBObject中取出的數據。
以下引用一個官方文檔的例子:
Person類
@Document(collection="person")
@CompoundIndexes({
@CompoundIndex(name = "age_idx", def = "{'lastName': 1, 'age': -1}")
})
public class Person<T extends Address> {
@Id
private String id;
@Indexed(unique = true)
private Integer ssn;
private String firstName;
@Indexed
private String lastName;
private Integer age;
@Transient
private Integer accountTotal;
@DBRef
private List<Account> accounts;
private T address;
public Person(Integer ssn) {
this.ssn = ssn;
}
@PersistenceConstructor
public Person(Integer ssn, String firstName, String lastName, Integer age, T address) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.address = address;
}
Account類
@Document
public class Account {
@Id
private ObjectId id;
private Float total;
}