How to get a node and relations as a list property of a node object in Spring Data neo4j?

Viewed 35

I have a Customer node class like this:

@Node
public class Customer extends BaseGraphEntity {
    private int customerId;
    private String name;
    private double size;

    @Relationship(type = "TRAN",direction = Relationship.Direction.OUTGOING)
    public Set<Transaction> transactions;

    public void inTran(Customer target, int year, double amount) {
        if (transactions == null) {
            transactions = new HashSet<>();
        }
        transactions.add(new Transaction().withAmount(amount).withTarget(target).withYear(year));
    }
}

And a relationship entity Transaction as:

@RelationshipProperties
public class Transaction extends BaseGraphEntity {
    private double amount;
    private int year;
    @TargetNode
    private Customer target;
}

This is my repository method:

public interface GraphRepository extends Neo4jRepository<Customer, Long>{
    @Query("MATCH (o:Customer{customerId: $customerId})-[t:TRAN]->(c) where t.year = $year return o,t,c")
    Customer getRelationsOfACustomer(int customerId, int year);
}

I checked the query using neo4j client and it returns what I want as shown in image(C1 is main customer):

client image

However, I want to cast this result in a singe Customer node with 2 elements in its "transactions" set and I want to keep all properties of Transaction class in the elements of set. But when I run it asks me to convert result into list of customers and when I do I lost transaction properties.

Is it possible to store result in single Customer instance with transactions? If so, how can I do this? I am open for all suggestions. Thanks for any help.

0 Answers
Related