2017-08-16 5 views
2

NodeEntity:春データのNeo4jカスタムクエリリストは、コンバータを使用しないのparams

@NodeEntity(label = "User") 
public class UserNode { 
    @GraphId 
    private Long _gid; 

    @Index(unique = true, primary = true) 
    @Convert(ObjectIdConverter.class) 
    private ObjectId id; 
} 

コンバータ:

public class ObjectIdConverter implements AttributeConverter<ObjectId, String>{ 
    @Override 
    public String toGraphProperty(ObjectId value) { 
     return ObjectIdUtils.compressed(value); 
    } 

    @Override 
    public ObjectId toEntityAttribute(String value) { 
     return ObjectIdUtils.uncompress(value); 
    } 
} 

リポジトリ:

public interface UserNodeRepository extends GraphRepository<UserNode> { 
    @Query("MATCH (user:User) WHERE user.id IN {0} RETURN user") 
    List<UserNode> findByIdIn(List<ObjectId> ids); 
} 

UserNodeRepository#findByIdInは、カスタムクエリです。要求パラメータは直接に変換され、ObjectIdConverterを使用せずににjsonに変換されます。

ログイン:

o.n.o.drivers.bolt.request.BoltRequest : Request: MATCH (user:User) WHERE user.id IN {0} RETURN user with params {0=[{timestamp=1500442853, machineIdentifier=11302907, processIdentifier=11906, counter=4709865, time=1500442853000, date=1500442853000, timeSecond=1500442853}, {timestamp=1500445335, machineIdentifier=11302907, processIdentifier=11906, counter=4709946, time=1500445335000, date=1500445335000, timeSecond=1500445335}, {timestamp=1500447522, machineIdentifier=11302907, processIdentifier=11906, counter=4710014, time=1500447522000, date=1500447522000, timeSecond=1500447522}, {timestamp=1500448399, machineIdentifier=11302907, processIdentifier=11906, counter=4710092, time=1500448399000, date=1500448399000, timeSecond=1500448399}]} 

が、これはSDNの期待ですか、私は何のコンセプトを失っていますか?

答えて

1

これは、カスタム@Queryのファインダーでは不可能です。 OGMが、パラメータが@Convertアノテーションを持つプロパティに関連していることを知る方法はありません(メソッド名はまったく使用されません)。手動の代わりにあなたの財産の種類には、この変換を解決し、パラメータとしてその使用するには:

@Query("MATCH (user:User) WHERE user.id IN {0} RETURN user") 
List<UserNode> findByIdIn(List<String> ids); 

しかし、これは派生ファインダのために正常に動作します - OGMは、フィールドを知っており、右からコンバータと@Convert注釈、メソッド名。単一のパラメータを持つ

例:私はa jira issueを作成している

// doesn't work 
List<UserNode> findByIdIn(List<ObjectId> ids); 

List<UserNode> findById(ObjectId id); 

は、残念ながらとINオペレータと収集パラメータのバグがあるようです。

+0

リストと同じバグです。 – Alex

関連する問題