Попытка вставить Json в Neo4j - PullRequest
0 голосов
/ 10 марта 2020

Все, кто я новичок в neo4j, и я пытаюсь ввести Json в Neo4j, но я получаю оператор Match вместо create. Раньше я что-то пробовал сам, а когда я вставил Json сообщение только как {"name": "john", "dept": "Science"}, это прошло без сбоев, но каждый раз, когда я хочу добавить данные числительных c он получает ошибку.

2020-03-10 13:21:59.793  INFO 94817 --- [ntainer#0-0-C-1] o.n.o.drivers.http.request.HttpRequest : Thread: 
29, url: http://localhost:7474/db/data/transaction/92, request: {"statements":[{"statement":"UNWIND {rows} 
as row **MATCH** (n) WHERE ID(n)=row.nodeId SET n:`UsersInfo` SET n += row.props RETURN row.nodeId as ref,
ID(n) as id, {type} as type","parameters":{"type":"node","rows":[{"nodeId":23,"props":{"name":"raj",
"dept":"science","age":11}}]},"resultDataContents":["row"],"includeStats":false}]}

Это мои классы KafkaConfiguration

@EnableKafka
@Configuration
public class KafkaConfiguration {

    @Bean
    public ConsumerFactory<String, Users> userConsumerFactory(){
        Map<String, Object> config = new HashMap<>();
         config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
         config.put(ConsumerConfig.GROUP_ID_CONFIG, "group_json");
         config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
         config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
         return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(),
                    new JsonDeserializer<>(Users.class));
        }

    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Users> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, Users> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(userConsumerFactory());
        return factory;
    }
}

KafkaConsumer class

Service
public class KafkaConsumer {

    @Autowired
    public Neo4jservice neo4jService;

    @KafkaListener(topics = "UsersJson", groupId = "group_id", containerFactory = "kafkaListenerContainerFactory")
    public void consume(Users users) {
        System.out.println("Consumed message: " + users);
        UsersInfo usern = new UsersInfo();
        usern.setAge(users.getAge());
        usern.setDept(users.getDept());
        usern.setId(users.getId());
        usern.setName(users.getName());
        neo4jService.saveIntoStudentsTable(usern);
    }
}

Neo4jService

@Service
public class Neo4jservice {

    @Autowired
    private UsersRepo userRepo;

    public UsersInfo saveIntoStudentsTable(UsersInfo users) {
        UsersInfo usern = userRepo.save(users);
        return (usern);
    }   

}

UsersRepo

@Repository
public interface UsersRepo extends Neo4jRepository<UsersInfo, Long>{

}

Класс пользователей

public class Users {

    private Long id;
    private String name;
    private String dept;
    private Integer age;

    **getters,setters and toString method here**
}

Аналогично классу UsersInfo

@NodeEntity
public class Users {

    @Id
    private Long id;
    private String name;
    private String dept;
    private Integer age;

    **getters,setters and toString method here**
}

Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 12 марта 2020

Вы также устанавливаете значение id класса User. Это заставит Spring Data Neo4j и Neo4j Object Graph Mapper, который используется для постоянства, думать, что сущность уже существует. В этом случае он будет MATCH на существующем id(n) и обновит свойства, как вы можете видеть в журналах, вместо CREATE нового узла.

...