SDN5/OGM3 сравнить java.util.Date по запросу Cypher

У меня есть следующая сущность:

@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?

1 ответ

Решение

minCreateDate Параметр, который вы используете для своего метода find, имеет тип Date и createDate свойство является строкой. Итак, эта часть a.createDate <= {minCreateDate} в основном сравнивает строковое представление minCreateDate и свойство String createDate,

В своих проектах я обычно сохраняю даты и метки времени как в базе данных, так и в своем коде.

Или даже лучше, если атрибуты даты имеют решающее значение для моего приложения, я использую подход "Модель дерева времени": https://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html

Другие вопросы по тегам