Spring数据neo4j嵌入属性MappingException

时间:2014-08-24 16:39:28

标签: spring neo4j spring-data-neo4j

我是Neo4J的新手;我正在开发一个用于学习目的的项目,我正面临着一个我无法解决的问题。我的模型可能会受到一些关系数据库的影响,但除了设计问题之外,我相信不管我在尝试什么应该在技术上完成。

我有一个NodeEntity Foo,其嵌套对象Bar已转换为 - String通过ConversionService。实际上,Bar只包含一个String字段,这使得映射变得微不足道。

@NodeEntity
public class Foo {
    @GraphId
    private Long id;
    @Indexed
    private Bar bar;
    ...
}

public class Bar {
    private String value;
    ... 
}

从我的存储库中如下定义的相当简单的Cypher查询返回时:

@RepositoryRestResource(...)
public interface FooRepository
    extends PagingAndSortingRepository<Foo, Long> {
    ...
    @Query ("MATCH (foo) RETURN foo.bar")
    Iterable<Bar> listBars ();
    ...
}

转换配置如下:

@Configuration
@ComponentScan(value = "de.h7r.playground.sd.neo4j",
        excludeFilters = @ComponentScan.Filter({ Configuration.class }))
public class PKanbanConfiguration {
    @Bean
    public ConversionServiceFactoryBean conversionService ()
            throws Exception {

        final ConversionServiceFactoryBean csfb = new ConversionServiceFactoryBean ();
        csfb.setConverters (getConverters ());

        return csfb;
    }

    private Set<Converter> getConverters () {
        return Sets.newHashSet (new BarConverter.ToString (), new BarConverter.FromString ());
    }
}

BarConverter的代码如下所示。

public class BarConverter {

    public static class FromString <S extends String, P extends Bar>
            implements Converter<S, P> {

        @Override
        public P convert (final S source) {
           // sets value into new instance of Bar and returns
        }
    }

    public static class ToString <P extends Bar, S extends String>
            implements Converter<P, S> {

        @Override
        public S convert (final P source) {
            // gets value from Bar and returns
        }
    }
}

我收到以下异常。

org.springframework.data.mapping.model.MappingException: Unknown persistent entity test.domain.Bar
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:178)
...

Bar确实不是一个持久的实体,我的理解也不应该是一个。我知道这可能与定义的listBars返回类型有关;另一方面,Foo s的存储库,所以我曾期望它能够工作。我非常喜欢获取整个节点集,然后只过滤嵌套对象;我不希望Bar替换为String Foo,因为它们的类型可能具有语义相关性。

关于如何返回现有节点的所有属性值,我有点迷失,特别是因为这个查询按照neo4j-shell的预期工作,所以我认为这是一个纯粹的Spring映射问题。

我可以根据要求添加任何可能有用的信息。

非常感谢任何帮助。

0 个答案:

没有答案