私はすでに多くの時間を費やしてきたので、誰かがこの問題を解決するのを手伝ってくれたらとても感謝しています.
私のアプリケーションのフロントエンドは、従業員データをサーバー エンドに送信します。サーバー エンドは、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);
}
}