Spring Data MongoDB 项目提供与MongoDB文档数据库的集成,Spring与Hibernate集成时,Spring提供了org.springframework.orm.hibernate3.HibernateTemplate实现了对数据的CRUD操作, Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,包括对集成的对象映射文件和POJO之间的CRUD的操作。
@Document(collection = "test_person")
public class Person {
private String name;
@DBRef
private EmailAddress emailAddress;
... getter setter 方法
}
@Document(collection = "test_email")
public class EmailAddress {
@Id
private String id;
private String value;
... getter setter 方法
}
当我们调用保存方法的时候:
public Person test() {
Person person = new Person();
person.setName("test");
EmailAddress emailAddress = new EmailAddress();
emailAddress.setId("5a05108d4dcc5dece03c9e69");
person.setEmailAddress(emailAddress);
testRepository.save(person);
return person;
}
上述的代码中,返回的person只有id,没有emailAddress的其他值。
public Person test() {
Person person = new Person();
person.setName("test");
EmailAddress emailAddress = new EmailAddress();
emailAddress.setName("afafa");
person.setEmailAddress(emailAddress);
testRepository.save(person);
return person;
}
上述的代码中,emailAddress不能被保存。
解决
生命周期事件
Spring Data MongoDB中存在一些生命周期事件,如:onBeforeConvert, onBeforeSave, onAfterSave, onAfterLoad and onAfterConvert等。我们可以继承AbstractMappingEventListener,然后重写这些方法,即可以实现。
代码
/**
* MongoDB级联控制
* Created by guanzhenxing on 2017/11/9.
*/
public class CascadeControlMongoEventListener extends AbstractMongoEventListener