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.]
なぜそのエラーが発生するのかについての良い情報が見つからないようで、何が原因なのか正確にはわかりません。
SuperNode クラスのほとんどを次に示します。
@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-spatial 依存関係があり、IndexType.POINT を使用できるはずです。
次に、SuperNode のリポジトリがあります。カスタム インターフェイスを実装し、Neo4j 空間ライブラリを使用する必要がある get メソッドを書き出すことができるように、基本的な CRUD タイプのリポジトリ インターフェイス、基本リポジトリによって実装されるカスタム インターフェイスがあります。 .
基本リポジトリ:
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) ;
}
カスタム実装 (ご覧のとおり、現在は不完全です):
public class 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;
}
}
SuperNode の新しいフィールドに @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: {}
しかし、なぜそれが得られるのかはまだわかりません。というわけで最後に2つ質問です。A. カスタム インターフェースの実装の何が問題なのか、B. それ以外の何が問題なのか!
どんな助けでも大歓迎です!