Spring Data Neo4j объединяет разные классы в одном NodeEntity - PullRequest
0 голосов
/ 13 сентября 2018

В настоящее время я работаю над проектом с spring-data-neo4j (текущий выпуск) и сталкиваюсь с проблемой при попытке объединить два класса и их свойства в один NodeEntity.Вот мои два класса:

@NodeEntity(label = "entity")
public class Ent1 {
    @Id
    @Index(unique = true)
    private Integer id;

    private Integer data1;
}

.

@NodeEntity(label = "entity")
public class Ent2 {
    @Id
    @Index(unique = true)
    private Integer id;

    private Integer data2;
}

Определяя свойство id, аннотированное @Index, SDN выполняет слияния вместо вставки нескольких узлов с одинаковым индексом.

Что я хочу добиться, так это то, что если я сохранюэкземпляр Ent1, а затем еще один экземпляр Ent2 с тем же идентификатором, что и у объекта Ent1, оба атрибута данных должны присутствовать в результирующем узле.Они должны быть объединены.

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

У кого-нибудь есть решение для объединения всех полей свойств вместо их замены / удаления?

1 Ответ

0 голосов
/ 15 сентября 2018

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

@Query("MERGE (e:entity{id:{ent1}.id}) SET e.data1 = {ent1}.data1"
void saveEnt1(@Param("ent1") Ent1 ent1);

@Query("MERGE (e:entity{id:{ent2}.id}) SET e.data2 = {ent2}.data2"
void saveEnt2(@Param("ent2") Ent2 ent2);

К сожалению, SDN не использует такой запрос изначально для слияния сущностей.

...