2015-04-16 4 views
0

Я использую Neo4j 2.1.7 с SDN 3.3.0.RELEASE во встроенном режиме.Neo4j SDN Обработчик транзакций UUID

Как я могу автоматически присваивать UUID новым узлам? Какова наилучшая практика при достижении этого?


Текущее решение:

Я добавил TransactionEventHandler автоматически добавить UUID свойство к каждому узлу. Кроме того, этот обработчик также блокирует фиксацию, когда кто-то пытается удалить uuid.

Проблемы:

С SDN я всегда перезагрузить объект за пределами моей сделки, чтобы использовать сгенерированный UUID. Это ограничивает полезность @Transactional. Может быть, есть способ обход этого?

ответ

0

Я только что увеличил свой метод сохранения в своей реализации службы сущностей, который установит uuid upfront, когда он определит, что данный объект является новым.

Entity:

public boolean isNew() { 
    return null == getId(); 
} 

EntityServiceImpl:

@Override 
public T save(T node) { 
    if (node.isNew() && node.getUuid() == null) { 
     node.setUuid(UUIDTransactionEventHandler.getUUID()); 
    } 
    return nodeRepository.save(node); 
} 
1

У вас есть несколько максимальных возможностей

  1. Назначьте UUID в конструкторе объекта, преимущество в том, что вы можете использовать uuid безопасно в равен и hashCode.

    MyNodeEntity() { 
        uuid = UUID.randomUUID.toString() 
        .... 
    } 
    
  2. Использование lifecycle events, очень полезно для случаев, подобных «добавить UUID , если он не установлен»

    @Bean 
    ApplicationListener<BeforeSaveEvent> beforeSaveEventApplicationListener() { 
        return new ApplicationListener<BeforeSaveEvent>() { 
         @Override 
         public void onApplicationEvent(BeforeSaveEvent event) { 
          MyNodeEntity entity = (MyNodeEntity) event.getEntity(); 
          if (!entity.hasUuid()) { 
           entity.setUuid(UUID.randomUUID.toString()); 
          } 
         } 
        }; 
    } 
    
  3. Подкласс GraphRepository и переопределения сохранить() метод - слишком сложно что-то, что может достигаются с использованием событий жизненного цикла