0

项目中,发现一个问题。我用的是 org.springframework.data.mongodb.core.MongoTemplate;用于存储数据。新建了一个Repository。创建的方法为insert(T t).代码如下

public class DashboardRepository<T> {
    protected MongoTemplate mongoTemplate;

    public DashboardRepository(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    public String getCollectionName() {
        return "dashboard";
    }


    public T insert(T objectToSave) {
        return mongoTemplate.insert(objectToSave, getCollectionName());
    }

    public boolean isDocumentExist(DashboardForm form) {
        Query query = new Query();
        query.addCriteria(Criteria
                .where(Constants.FIELD_NAME)
                .is(form.getName()));
        return this.mongoTemplate.exists(query, this.getCollectionName());
    }

}

调用repositiry的地方如下

public Long create(DashboardForm form) {
    // 校验名称是否存在
    if (dashboardRepository.isDocumentExist(form)) {
        throw DashboardBusinessException.DASHBOARD_FILE_NAME_EXIST;
    }
     。。。
    if (userName != null && !userName.equals("")) {
        DashboardDB dashboardDB = new DashboardDB();
        dashboardDB.setName(form.getName());
        dashboardDB.setComment(form.getComment());
        dashboardDB.setComponent(form.getComponent());
        dashboardDB.setCreatedDate(Long.toString(System.currentTimeMillis()));
        dashboardDB.setUserName(userName);
        dashboardDB.setCreatedUserId(Long.toString(currentUserId));
        //这里调用的持久化层    
        dashboardRepository.insert(dashboardDB);
    } else {
        throw DashboardBusinessException.DASHBOARD_USER_NAME_ERROR;
    }

    return null;
}

奇怪的问题:当程序刚走到create的方法的时候,mongo数据库里会有很大概率存入DashboardForm form,(参数中 对象)。况且,我程序里都没有存DashboardForm 对象的代码。

当把方法改为create或者add,或者其他名称,就不会有这个问题。去掉泛型T,也不会有这个问题。

这是为什么?

 

 

 

 

已回答的问题