我有两个实体:
@NodeEntity
public class User {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
@Relationship(type = "IN")
private Department department;
}
@NodeEntity
public class Department {
@Id
@GeneratedValue
private Long id;
private String name;
}
我需要一个搜索名字、姓氏和部门 ID 的逻辑。 我查看了存储库方法,但找不到解决方案,因为我的查询是动态的(搜索查询中可以有 0 或 3 个参数)。
此类任务的最佳解决方案是什么?现在我设法通过手动查询构建和 session 对象来做到这一点,如下所示:
StringBuilder builder = new StringBuilder("MATCH (user:User)-[:IN]->(department:Department) WHERE ");
if (departmentId != null) {
builder.append(String.format("ID(department) = %s", departmentId));
builder.append(" AND ");
}
...
List<User> userList = Lists.newArrayList(session.query(User.class,builder.toString(), Collections.emptyMap()));
但它看起来很丑,我想找到更好的解决方案。 谢谢!
最佳答案
与 CASE expressions
您可以获取密码查询中的所有逻辑:
MATCH (U:User)-[:IN]->(D:Department) WHERE
CASE WHEN NOT $firstName IS NULL
THEN U.firstName = $search.firstName
ELSE TRUE
END AND
CASE WHEN NOT $lasrName IS NULL
THEN U.lastName = $lastName
ELSE TRUE
END AND
CASE WHEN NOT $departmentId IS NULL
THEN ID(D) = $departmentId
ELSE TRUE
END
RETURN *
关于java - 为 Spring Data Neo4j 创建动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50076997/