2013-02-24 47 views
1

我试图将现有项目转换为使用Spring Data和Neo4j,但我遇到了一些问题。当我尝试生成项目,我得到以下异常:Spring Data Neo4j“找不到类型的属性”异常

[etc. ...] 
Caused by: 
org.springframework.data.mapping.PropertyReferenceException: No property get found for type com.myproject.models.SuperNode 
    at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75) 
[... etc.] 

我似乎无法找到我为什么会得到这个错误有什么好的信息,我不知道究竟是什么原因造成它。

这里是大多数超节点类:

@NodeEntity 
public class SuperNode extends AbstractMapValues { 

    @GraphId 
    private Long superNodeId; 

    @NotNull 
    private boolean superNodeFullyGenerated = false; 

    private BaseLandType likelyLandType; 

    private BaseLandType unlikelyLandType; 

[methods and such] 
} 

它从AbstractMapValues类下降:

@NodeEntity 
public abstract class AbstractMapValues implements Comparable<AbstractMapValues> { 

    @GraphId 
    public Long id; 

    @Range(min = 0, max = MAX_MAP_INT) 
    private int xCoor; 

    @Range(min = 0, max = MAX_MAP_INT) 
    private int yCoor; 

    //set only when x and y are set 
    @Indexed(indexType = IndexType.POINT) 
    private String wkt; 

    @Range(min = BASIC_MIN, max = BASIC_MAX) 
    private int percipitation; 

    @Range(min = -1, max = BASIC_MAX) 
    private int topography; 

    @Range(min = BASIC_MIN, max = BASIC_MAX) 
    private int seaLevel; 

[more int fields, but you get the picture] 
} 

正如你可以看到这些意味着在地图上表示点。我的项目中有一个Neo4j空间依赖关系,它应该允许我使用IndexType.POINT。

然后我有超节点的存储库。我有我的基本CRUD类型的存储库接口,它是一个由基本存储库实现的自定义接口,这样我就可以实现自定义接口并写出将要求使用Neo4j空间库的get方法。

基本回购:

public interface SuperNodeRepo extends CRUDRepository<SuperNode>, SpatialRepository<SuperNode>, SuperNodeRepoCustom { 

} 

自定义界面:

@NoRepositoryBean 
public interface SuperNodeRepoCustom { 

    public SuperNode getSuperNode(int xCoorSuperNode, int yCoorSuperNode) ; 

    public List<SuperNode> getSuperNodes(int xmax, int xmin, int ymax, int ymin) ; 

} 

自定义执行(你可以看到它是目前不完整):

公共类SuperNodeRepoCustomImpl实现SuperNodeRepoCustom {

public SuperNode getSuperNode(int xCoorSuperNode, int yCoorSuperNode) { 
    return null; 
} 

public List<SuperNode> getSuperNodes(int xmax, int xmin, int ymax, int ymin) { 
    return null; 
} 

}

我试过直接向超节点中的一个新字段添加@Indexed,但这没有帮助。我试过了,没有扩展spatialRepo。

当我尝试它没有我的自定义接口正在扩展我得到一个不同的错误:

No matching bean of type [com.orclands.game.models.SuperNode] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 

但我仍然不知道为什么我得到这一点。所以最后我有两个问题。 A.我的自定义接口实现中出现了什么问题,以及B.除此之外哪些是错误的!

任何帮助将不胜感激!

+1

您的层次结构中应该只有一个@GraphId注释。 – 2013-02-24 20:39:14

+0

你有github上的项目还是要看看它的地方? – 2013-02-24 20:39:31

+0

嗯,我删除了额外的@GraphId,但我仍然得到“没有匹配的类型[com.orclands.game.models.SuperNode]类型的错误”的错误。恐怕我只有在私人存储库上,因为这是个人项目。如果可能有任何我遗漏的东西,我可以提供更多信息。 – CorayThan 2013-02-24 20:53:49

回答

0
**@Repository** 
public interface SuperNodeRepo extends CRUDRepository<SuperNode>, SpatialRepository<SuperNode>, SuperNodeRepoCustom { 

} 
相关问题