【问题标题】:@RepositoryEventHandler events not invoked for Neo4j repositories未为 Neo4j 存储库调用 @RepositoryEventHandler 事件
【发布时间】:2015-02-10 17:03:14
【问题描述】:

我编写了一个 RepositoryEventHandler 来使用 Spring Data Neo4j。我尝试了许多不同的配置方式,但似乎无法触发任何事件。用户数据保存成功,但没有生成日志,或者断点命中。我确信 @Beans 已加载,因为在启动期间生成了一些较早的错误(缺少我此后包含的库)。

代码和配置如下...

@RepositoryEventHandler:

package com.test.repository.handler;

@Component
@RepositoryEventHandler(User.class)
public class UserEventHandler {

    private Log logger = LogFactory.getLog(getClass());

    @HandleBeforeSave
    public void handleBeforeSave(User user) {
        logger.debug("handle before save for " + user.getId());
    }

    @HandleBeforeCreate
    public void handleBeforeCreate(User user) {
        logger.debug("saved user " + user.getId());
    }

    @HandleAfterDelete
    public void handleAfterDelete(User user) {
        logger.debug("deleted user " + user.getId());
    }

}

存储库配置

package com.test.config;

@Configuration
public class RepositoryConfiguration {

    @Bean
    UserEventHandler userEventHandler() {
        return new UserEventHandler();
    }

    @Bean
    AnnotatedHandlerRepositoryEventListener repositoryEventListener() {
        return new AnnotatedHandlerRepositoryEventListener(
            "com.test.repository.handler");
    }

}

用户存储库:

package com.test.repository;

public interface UserRepository extends PagingAndSortingRepository<User, Long> {

    User findById(Long id);
}

在寻找解决此问题的方法时,我没有遇到任何表明 @RepositoryEventHandler 不适用于 Neo4j 数据存储库的情况。我错过了什么吗?

以下是我正在使用的相关版本:

compile 'org.springframework.data:spring-data-rest-webmvc:2.2.1.RELEASE'
compile 'org.springframework.data:spring-data-neo4j:3.2.1.RELEASE'               
compile 'org.springframework.data:spring-data-neo4j-rest:3.2.1.RELEASE' 
compile 'org.springframework.data:spring-data-rest-repository:1.0.0.RELEASE'
compile 'com.google.guava:guava:r05'

感谢您的帮助。

【问题讨论】:

  • 我也有同样的问题。你的怎么解决的?如果在 Github 上,您可以发布指向您的项目的链接吗?

标签: java spring spring-data spring-data-neo4j


【解决方案1】:

尝试注释 userRepository "@RepositoryRestResource" 例如

@RepositoryRestResource(collectionResourceRel = "users", path = "users")

如果这些是供用户使用的路径。

应该针对 rest 存储库调用处理程序方法,而不仅仅是应用程序中的任意 crud 调用。例如,如果您在应用程序启动期间创建了一堆用户,这些内联调用将不会调用处理程序。

【讨论】:

    猜你喜欢
    • 2015-12-24
    • 2014-10-20
    • 2016-10-02
    • 2019-05-19
    • 1970-01-01
    • 2016-10-05
    • 2019-01-31
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多