cancel
Showing results for 
Search instead for 
Did you mean: 

Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.

"Unable to ignore case of java.lang.String types", ignoreCase combined with Contains not working

So far Spring-Data-Neo4J works great but now i am hitting a problem:

In one of my "Neo4jRepository" for ProductResponsibleUnitRelation i declare a method:

List<ProductResponsibleUnitRelation> findByProductHierarchyIdContainingIgnoreCase(String partialProductHierarchyId);

Using this method yields this exception:

Caused by: java.lang.IllegalStateException: Unable to ignore case of java.lang.String types, the property 'productHierarchy' must reference a String
	at org.springframework.util.Assert.state(Assert.java:73)
	at org.springframework.data.neo4j.repository.query.filter.PropertyComparisonBuilder.applyCaseInsensitivityIfShouldIgnoreCase(PropertyComparisonBuilder.java:101)
	at org.springframework.data.neo4j.repository.query.filter.PropertyComparisonBuilder.build(PropertyComparisonBuilder.java:49)

Inspecting code of org.springframework.data.neo4j.repository.query.filter.PropertyComparisonBuilder reveals the problem. The method canIgnoreCase is called it looks like this:

	private boolean canIgnoreCase(Part part) {
		return part.getType() == SIMPLE_PROPERTY && String.class.equals(part.getProperty().getLeafType());
	}

It seems that the use of IgnoreCase (part.getType()) is only allowed for SIMPLE_PROPERTY but no for all others like CONTAINING.

The question is: How could i get a working findByContainingIgnoreCase method, preferable without using cypher (i am using spring data to abstract from these details).

My OGM calsses are these:

@RelationshipEntity(type = "responsible_for_product")
@Data
public class ProductResponsibleUnitRelation {

    @Id
    @GeneratedValue
    private Long id;


    @StartNode
    private LegalEntityNode legalEntity;

    @EndNode
    private ProductHierarchyNode productHierarchy;

    private LocalDate validFrom;

    private LocalDate validTo;

}
@NodeEntity
@Data
public class ProductHierarchyNode {
    @Id
    private String id;

}

I want to find all relations by case insensitive parts ("containing") of the id.

4 REPLIES 4

This will be part of the Spring Data Neo4j Moore release. The ticket is already solved https://jira.spring.io/browse/DATAGRAPH-1190

Thanks for quick reply,

is there a plan when 5.2 M2 (Moore) is available?
Is there any workaround available?

The Spring Data releases are managed by Pivotal and Moore M2 is currently scheduled for March 7th (https://spring-calendar.cfapps.io/).

You could go with a regex e.g. findByNameRegex(String regex). Have a look at the test/example https://github.com/spring-projects/spring-data-neo4j/blob/e4450fdd9866ca7451f1cb8bee375cec532dcdf2/s...

Just: Thank You

Nodes 2022
Nodes
NODES 2022, Neo4j Online Education Summit

All the sessions of the conference are now available online