2016-02-14 2 views
0

У меня есть два узла сущности Neo4j-OGM, связанные с имуществом менее отношения, как так:Neo4j OGM, как удалить отношения

@NodeEntity 
public class User { 

    @Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.UNDIRECTED) 
    private Set<Device> devices; 

} 

@NodeEntity 
public class Device { 

    @Relationship(type = RelationshipNames.USER_DEVICES, direction = Relationship.UNDIRECTED) 
    private User user; 

} 

При добавлении устройства к пользователю, а затем выполнить сохранение, я получаю этот график :

enter image description here

Позже, когда я как удалить устройство из пользовательского устройства, установленного и сохранить его, и установить пользовательское устройство обнулить и сохранить его, я до сих пор один и тот же график, что означает связь между устройством и пользователь все еще существует.

Я делаю что-то неправильно? Есть ли способ удалить его?

ответ

1

Не видя кода, который вы написали, который сохраняет эти объекты, нелегко диагностировать вашу проблему. Однако я бы предложил две вещи.

Во-первых, я бы удостоверился, что добавление и удаление ссылок на пользовательские устройства в вашей модели домена управляется самой моделью домена. Другими словами, введите поведение в классе User, который сохраняет объект Device согласованным, всякий раз, когда устройство добавляется или удаляется.

addDevice(Device device) { 
    if (device.user() != null) { 
     device.user().removeDevice(device) 
    } 
    device.setUser(this) 
    devices.add(device); 
} 

Очевидно, что вы должны были бы написать эквивалентную removeDevice(), а также. Это обеспечит правильную синхронизацию обоих объектов, если вы будете управлять ими через пользователя. Если вы также планируете управлять ими с устройства, вы должны написать эквивалентный метод updateUser() в классе Device, который достигает такого же эффекта.

Деловая точка: Получите вашу модель домена, чтобы сделать эту работу. Его гораздо проще рассуждать (и тестировать), и вам не нужно постоянно звонить получателям и сеттерам в вашем коде настойчивости, чтобы просто синхронизировать все.

Если после внесения этих изменений он по-прежнему не работает, затем сделайте НЕПРЕДНАМЕРЕННЫЕ отношения ВХОДЯЩИМИ на одну сторону и ВЫХОДИМИ с другой (не имеет значения, какой). Если это устраняет проблему, это указывает на возможную ошибку в OGM. Если в этом случае, сообщите об этом здесь!

+0

Винс, я изменил отношения, как вы упомянули, и действительно отношение удаляется (по тому же коду - я изменил только тип отношения). Должен ли я отправить фрагмент кода, генерирующий проблему? – AvivC

+0

, что было бы здорово, спасибо. – Vince

+0

Я отправил [новую проблему на git hub] (https://github.com/neo4j/neo4j-ogm/issues/112), сообщите мне, могу ли я помочь дальше. – AvivC

 Смежные вопросы

  • Нет связанных вопросов^_^