如何使用密钥将数据存储与文档链接

时间:2014-06-11 14:37:27

标签: java google-app-engine google-cloud-datastore gae-search

  

如果有人能帮助我解决这个问题,我将非常感激   因为我已经花了很多时间。

     

我的应用程序的前端将员工数据发送到服务器端,   它创建Emmployee对象并将数据保存在数据存储区中。我的   应用程序在标题上提供关键字搜索功能,   公司和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);
        }

        }

1 个答案:

答案 0 :(得分:2)

  1. 保存员工实体。获取身份证。
  2. 将此ID设置为文档ID,索引文档。
  3. 这两个步骤都可以在同一个服务器调用中完成。只需在创建文档之前移动makePersistent()即可。