0

私はすでに多くの時間を費やしてきたので、誰かがこの問題を解決するのを手伝ってくれたらとても感謝しています.

私のアプリケーションのフロントエンドは、従業員データをサーバー エンドに送信します。サーバー エンドは、Employee オブジェクトを作成し、データをデータストアに保存します。私のアプリケーションは、役職、会社、および jobDesc のキーワード検索機能を提供するため、Search Api を使用しています。

問題は、完全なデータを保存するためにデータストアを使用し、検索可能なデータを保存するためにドキュメントを使用したいということです。データストアをドキュメントにリンクするにはどうすればよいですか? 従業員のキーをドキュメントIDとして設定すれば実現できることはわかっていますが、問題は保存されているデータのキーをどのように取得するかです。その時点でキーを持っているため、明らかに nullPointerException を返す e.getKey() を使用してキーを取得しようとすると。

データストアに保存されているすべての従業員データを読み取り、それを使用してドキュメントを作成し、従業員のキーをドキュメント ID として設定することでこれを実現できますが、データがアプリケーションのフロントエンドから受信されるときにドキュメントを作成したいと考えています。

//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);
        }

        }
4

1 に答える 1