0

如果有人能幫我解決這個問題,我將非常感謝 ,因爲我已經花了很多時間。如何鏈接數據存儲和文檔使用密鑰

我的應用程序的前端發送員工數據到服務器端, 它創建Emmployee對象並將數據保存在數據存儲上。我的 應用程序在title, 公司和jobDesc上提供了關鍵字搜索功能,所以我使用了Search Api。

問題是我想使用數據存儲來存儲完整的 數據和文檔以存儲可搜索的數據。如何將 數據存儲與文檔鏈接?我知道如果我將員工的 密鑰設置爲文檔ID,則可以實現,但問題是如何獲取正在存儲的 數據的密鑰。如果我嘗試使用e.getKey()獲取密鑰,那麼 顯然會返回nullPointerException,因爲那時確實有 處的密鑰。

我可以通過讀取存儲在數據存儲 所有員工數據和創建它的文檔和設置員工的文檔 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); 
     } 

     } 

回答

2
  1. 保存員工的實體。獲取ID。
  2. 將此ID設置爲文檔ID,索引文檔。

這兩個步驟都可以在同一個服務器調用中完成。只需在創建文檔之前移動makePersistent()即可。

+0

非常感謝Andrei :) – Rizvi

+0

我的回答很有幫助,你可以簡單地接受它。這是在StackOverflow上說「謝謝」的標準方式:) –