SDN5/OGM3 在 Cypher 查询中比较 java.util.Date
SDN5/OGM3 compare java.util.Date at Cypher query
我有以下实体:
@NodeEntity
public class Action {
...
@Index(unique = false)
private Date createDate;
...
}
我需要获取在之前某个时间段内创建的最后一个 Action
。
为了做到这一点,我实现了以下存储库方法:
@Repository
public interface ActionRepository {
@Query("MATCH (a:Action)-[:CREATED_BY]->(u:User) WHERE a.entityType = {entityType} AND a.createDate <= {minCreateDate} AND u.id = {userId} RETURN a ORDER BY a.createDate DESC LIMIT 1")
Action findLastByEntityTypeForUser(@Param("entityType") String entityType, @Param("minCreateDate") Date minCreateDate, @Param("userId") Long userId);
}
我用下面的代码来测试这个方法:
decisionDao.create("Decision2", "Decision2 description", null, false, null, user1);
Date minStartDate = DateUtils.addMilliseconds(new Date(), -1000 * 60);
Action user1LastAction = actionRepository.findLastByEntityTypeForUser(Decision.class.getSimpleName(), minStartDate, user1.getId());
assertNotNull(user1LastAction); // test fails here because of NPE
但没有这部分 Cypher 查询 AND a.createDate <= {minCreateDate}
我可以成功找到 Action
个实例。
在 Neo4j 级别,我的数据如下所示:
{
"updateDate":"2017-10-08T12:21:39.15
3Z",
"entityName":"General",
"en
tityType":"CriterionGroup",
"entityId":1,
"id":1,
"type":"CREATE",
"createDate":"2017-10-08T12:21:39.153Z"
}
我做错了什么以及如何正确比较 SDN/OGM 和 Cypher 的日期?
此外,有什么方法可以告诉 SDN/OGM 将 java.util.Date
对象存储为 long
毫秒和 String
?
您用于查找方法的 minCreateDate
参数是日期类型,createDate
属性 是字符串。所以,这部分 a.createDate <= {minCreateDate}
基本上是比较 minCreateDate
的字符串表示和字符串 属性 createDate
.
在我的项目中,我通常在数据库和代码中保存日期和时间戳。
或者更好的是,如果日期属性对我的应用程序至关重要,我正在使用 "Time Tree Model" 方法:https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html
我有以下实体:
@NodeEntity
public class Action {
...
@Index(unique = false)
private Date createDate;
...
}
我需要获取在之前某个时间段内创建的最后一个 Action
。
为了做到这一点,我实现了以下存储库方法:
@Repository
public interface ActionRepository {
@Query("MATCH (a:Action)-[:CREATED_BY]->(u:User) WHERE a.entityType = {entityType} AND a.createDate <= {minCreateDate} AND u.id = {userId} RETURN a ORDER BY a.createDate DESC LIMIT 1")
Action findLastByEntityTypeForUser(@Param("entityType") String entityType, @Param("minCreateDate") Date minCreateDate, @Param("userId") Long userId);
}
我用下面的代码来测试这个方法:
decisionDao.create("Decision2", "Decision2 description", null, false, null, user1);
Date minStartDate = DateUtils.addMilliseconds(new Date(), -1000 * 60);
Action user1LastAction = actionRepository.findLastByEntityTypeForUser(Decision.class.getSimpleName(), minStartDate, user1.getId());
assertNotNull(user1LastAction); // test fails here because of NPE
但没有这部分 Cypher 查询 AND a.createDate <= {minCreateDate}
我可以成功找到 Action
个实例。
在 Neo4j 级别,我的数据如下所示:
{
"updateDate":"2017-10-08T12:21:39.15
3Z",
"entityName":"General",
"en
tityType":"CriterionGroup",
"entityId":1,
"id":1,
"type":"CREATE",
"createDate":"2017-10-08T12:21:39.153Z"
}
我做错了什么以及如何正确比较 SDN/OGM 和 Cypher 的日期?
此外,有什么方法可以告诉 SDN/OGM 将 java.util.Date
对象存储为 long
毫秒和 String
?
您用于查找方法的 minCreateDate
参数是日期类型,createDate
属性 是字符串。所以,这部分 a.createDate <= {minCreateDate}
基本上是比较 minCreateDate
的字符串表示和字符串 属性 createDate
.
在我的项目中,我通常在数据库和代码中保存日期和时间戳。
或者更好的是,如果日期属性对我的应用程序至关重要,我正在使用 "Time Tree Model" 方法:https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html