Как связать хранилище данных с документом, используя ключ

Я буду очень благодарен, если кто-то может помочь мне решить эту проблему, так как я уже потратил на это много времени.

Интерфейс моего приложения отправляет данные о сотрудниках на сервер, который создает объект Emmployee и сохраняет данные в хранилище данных. Мое приложение предоставляет функцию поиска по ключевым словам по названию, компании и jobDesc, поэтому я использую Search Api.

Проблема в том, что я хочу использовать хранилище данных для хранения полных данных и документ для хранения доступных для поиска данных. Как я могу связать хранилище данных с документом? Я знаю, что это может быть достигнуто, если я задаю ключ сотрудника в качестве идентификатора документа, но проблема в том, как мне получить ключ данных, которые хранятся. Если я пытаюсь получить ключ с помощью e.getKey(), который, очевидно, возвращает nullPointerException, потому что у него есть ключ в то время.

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

//EmployeeServlet
    PersistenceManager pm = PMF.get().getPersistenceManager();

    Employee e = new Employee(title, company, location, category,
                    jobType, gender,
                    careerLevel, salaryRange,
                    sector, jobDesc);

            Document newDoc = Document.newBuilder().setId(???)
                    .addField(Field.newBuilder().setName("title").setText(title))
                    .addField(Field.newBuilder().setName("company").setText(company))
                    .addField(Field.newBuilder().setName("jobDesc").setText(jobDesc)).build();

    SearchIndexManager.INSTANCE.indexDocument("Employee", newDoc);


                pm.makePersistent(e);




 //Employee   
    @PersistenceCapable
    public class Employee {
        @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Key key;
        @Persistent
        private String title;
        @Persistent
        private String company;
        @Persistent
        private String location;
        @Persistent
        private String category;
        @Persistent
        private String jobType;
        @Persistent
        private String gender;
        @Persistent
        private String careerLevel;
        @Persistent
        private String salaryRange;
        @Persistent
        private String sector;
        @Persistent
        private Text jobDescription;


        public Employee(String title, String company, String location,
                String category, 
                String jobType, String gender, 
                String careerLevel, String salaryRange,
                String sector,
                String jobDescription) {
            super();
            this.title = title;
            this.company = company;
            this.location = location;
            this.category = category;
            this.jobType = jobType;
            this.gender = gender;
            this.careerLevel = careerLevel;
            this.salaryRange = salaryRange;
            this.sector = sector;
            this.jobDescription = new Text(jobDescription);
        }

        }

1 ответ

Решение
  1. Сохранить сотрудника юридического лица. Получить идентификатор.
  2. Установите этот идентификатор как идентификатор документа, индексируйте документ.

Оба шага могут быть выполнены в одном вызове сервера. Просто переместите makePersistent(), прежде чем создавать документ.

Другие вопросы по тегам