2017-01-31 3 views
1

Я использую данные весны neo4j версии 4.1.2 с драйвером болта 2.0.6. Я столкнулся с проблемой разрыва отношений между сущностями автоматически.Neo4j: автоматически удаляет отношения

У меня есть организация и организация с наименованием домена, принадлежащая многим организациям, но я упоминаю несколько.

схема организации

public class Organization { 

     private String formalName; 
     private String shortName; 

    @Relationship(type = COUNTRY) 
     private Country country; 

     @Relationship(type = HAS_GROUP) 
     private List<Group> groupList = new ArrayList<>(); 
    } 

И страна схема

public class Country { 

@Relationship(type = HAS_HOLIDAY) 
    private List< CountryHolidayCalender> countryHolidayCalenderList; 

} 

Когда я обновляя организации она разрывает все отношения страны, как брейки страна-праздник отношений и т.д.

Организация обновления ели код

Organization unit = organizationGraphRepository.findOne(unitId); 
unit.setFormalName(organizationGeneral.getFormalName()); 
unit.setShortName(organizationGeneral.getShortName()); 
organizationGraphRepository.save(unit); 

Я не могу найти то, что я делаю неправильно. Пожалуйста, помогите мне, мы не можем позволить себе такую ​​ошибку в это время.

Благодаря

+0

Вы пытались указать большую глубину для загрузки объекта «Организация»? например 'organizationGraphRepository.findOne (unitId, 2)' – nmervaillie

+0

Я получил вашу точку зрения, несколько отношений приходят, когда я нахожусь по организации по id, а затем после сохранения она обновляет эти отношения, остальную часть перерывов. Итак, если мне нужно обновить много данных о взаимоотношениях, тогда я должен писать пользовательские запросы для каждого или любого другого решения? –

ответ

0

Глубины по умолчанию для загрузки сущностей 1. Это означает, что findOne(id) будет возвращать только данное лицо + свои прямые связанные объекты. В вашем случае organization --> country --> CountryHolidayCalender будет загружена только организация и родственная страна.

Возможно, поэтому вы не видите прикрепленные узлы.

save отслеживает состояния объектов, обнаруживает изменения и оптимизирует обновления. Не будет обновляться базы данных для объектов/свойств, которые не изменялись между find и save.

Итак, до тех пор, пока вы не касаетесь @Relationship аннотированных атрибутов, вы можете безопасно сохранять их, они не будут изменены, даже если они не были загружены.

Что касается вашего предыдущего комментария, в SDN нет ленивой загрузки для динамического поиска глубины (существует, устарела). Итак, да, вы должны сами управлять глубиной. Если объем данных не слишком велик, возможно, вы захотите загрузить все сразу (с помощью find(id, -1)). Другим вариантом может быть загрузка по запросу, вручную запрос отсутствующих фрагментов графика.

Вы также можете быть заинтересованы в this ticket для более точного управления загрузкой объекта.

+0

Можете ли вы дать мне ответ на один вопрос, есть ли вероятность нарушения отношений, если я загружаю график с использованием глубины 2 и сохраняя без какой-либо глубины? –

+0

Это должно быть безопасно, ваши отношения должны быть сохранены – nmervaillie

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