Gaurav Abbi
Gaurav Abbi

Reputation: 645

How to fix issue of Spring data neo4j 4 deleting previous relationships when adding new ones?

I am using SDN4 and facing the issue of previous relationships getting deleted on adding new different ones. Here is my scenario,

Step 1 Create a node with some relationships using Relationship entities. save the relationship entity.

Step 2 get the node based on some properties using Spring Repository and Cypher and add new different relationships. Here is my fetch API:

@Component("productRepository")
public interface ProductRepository extends GraphRepository<Product>{
   @Query("MATCH (c:Product {uuid:{0}}) RETURN c")
   Product findByUuid(String uuid);
}

save the relationship entity

after doing this, the relationships added in step 1 are lost, but those in step 2 persist.

on doing some debugging, i can see that the Node entities returned by a fetch using Cypher and Spring Repository has null value for relationship entity.

Note: If I do not do step 2, then relations in step 1 are reflected correctly.

Could someone please let me know If i am missing something or if this is an issue.I am not seeing a way to specify depth in this case unless this is somewhere in the cypher.

Upvotes: 0

Views: 724

Answers (3)

Umit Kırtıl
Umit Kırtıl

Reputation: 60

i know its been forever from last answer but someone might have trouble with this issue aswell ..

i guess ogm has covered this exception by updating it.Because prev. relationships are not deleting anymore.(tested with ogm 2.0.5 & neo4j 3.0.7.)

ps. query with 1 depth can reduce your execution time realy bad. so dont use it anymore unless its necessary.

Upvotes: 0

Gaurav Abbi
Gaurav Abbi

Reputation: 645

For others reference, I followed Option b as suggested by @Luanne.

here is code snippet

def getByUuid[T](klazz: Class[T], uuid: String): T = {
    IterableUtils.getSingleOrNull(session.loadAll(klazz, new Filter("uuid", uuid), 1))
}

Upvotes: 0

Luanne
Luanne

Reputation: 19373

The depth parameter on a @Query is not supported. The options you have at this point are -

a. To reload the Product returned by the @Query to the depth you require using the repository findOne(id,depth), or the Neo4jTemplate.load(type,id,depth)

b. If you can translate your @Query to a set of org.neo4j.ogm.cypher.Filter then you can use the Session.loadAll methods which accept Filters as well as a depth. MusicIntegrationTest contains a couple of Filter examples.

Upvotes: 2

Related Questions