小编eri*_*ric的帖子

MongoDB Lifecycle事件访问MongoTemplate

我正在尝试使用Spring Data Mongodb为我的mongodb文档实现版本控制系统.我以为我会利用Mongo生命周期事件

Spring中的Mongo生命周期事件

我想要做的是听取onBeforeSave并获取文档的原始版本,并获得两者之间的差异.

@Override
public void onBeforeSave(Table table, DBObject dbo) {

    if (table.getId() != null) {
        TableChange change = new TableChange();

        Table beforeTable = mongoOperations.findById(table.getId(), Table.class);

        if (!beforeTable.getName().equals(table.getName())) {
            change.setName(table.getName());
        }

        MapDifference<String, Column> diff = Maps.difference(beforeTable.getColumns(), table.getColumns());

        logger.debug(diff.entriesInCommon().toString());
        logger.debug(diff.entriesDiffering().toString());
        logger.debug(diff.entriesOnlyOnLeft().toString());
        logger.debug(diff.entriesOnlyOnRight().toString());         

        table.addChange(change);
    }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我无法获得对mongoOperations的引用.它不断创建循环引用.是否我@Autowire:

自动注射

Mongo配置:

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="fooConverter" />
    <property name="writeResultChecking" value="EXCEPTION" />
</bean>

<bean class="com.example.listener.document.TableListener"></bean>
Run Code Online (Sandbox Code Playgroud)

监听器:

public class TableListener extends AbstractMongoEventListener<Table> {

    private static final Logger logger …
Run Code Online (Sandbox Code Playgroud)

spring mongodb spring-data spring-data-mongodb

9
推荐指数
1
解决办法
6452
查看次数