2017-04-09 60 views
0

我有两个简单的POJO的公司和员工。我正在使用morphia将它们保存在MongoDB中。员工是公司类中的参考文档。我成功地能够保存公司对象,但当我尝试检索。我得到一个对象Morphia MongoDB空对象

Company.java

package com.hifi.model; 

import javax.xml.bind.annotation.XmlRootElement; 

import org.bson.types.ObjectId; 
import org.mongodb.morphia.annotations.Entity; 
import org.mongodb.morphia.annotations.Id; 
import org.mongodb.morphia.annotations.Reference; 

@XmlRootElement 
@Entity("companies") 
public class Company { 

private String companyName; 
private String numberOfEmployees; 
@Id 
private ObjectId companyId; 
@Reference 
private Employee emp; 
public ObjectId getCompanyId() { 
    return companyId; 
} 
public void setCompanyId(ObjectId companyId) { 
    this.companyId = companyId; 
} 

public String getCompanyName() { 
    return companyName; 
} 
public void setCompanyName(String companyName) { 
    this.companyName = companyName; 
} 
public String getNumberOfEmployees() { 
    return numberOfEmployees; 
} 
public void setNumberOfEmployees(String numberOfEmployees) { 
    this.numberOfEmployees = numberOfEmployees; 
} 
public Employee getEmp() { 
    return emp; 
} 
public void setEmp(Employee emp) { 
    this.emp = emp; 
} 

} 

Employee.java

package com.hifi.model; 

import javax.xml.bind.annotation.XmlRootElement; 

import org.bson.types.ObjectId; 
import org.mongodb.morphia.annotations.Entity; 
import org.mongodb.morphia.annotations.Id; 

@XmlRootElement 
@Entity("employees") 
public class Employee { 

private String name; 
private int age; 
@Id 
private ObjectId empId; 
public ObjectId getEmpId() { 
    return empId; 
} 
public void setEmpId(ObjectId empId) { 
    this.empId = empId; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public int getAge() { 
    return age; 
} 
public void setAge(int age) { 
    this.age = age; 
} 

} 

这里是我的吗啡查询例如

package com.hifi; 

import java.util.ArrayList; 
import java.util.List; 

import org.mongodb.morphia.Datastore; 
import org.mongodb.morphia.Morphia; 
import org.mongodb.morphia.query.Query; 

import com.hifi.database.MongoDBSingleton; 
import com.hifi.model.Company; 
import com.hifi.model.Employee; 
import com.hifi.util.Constants; 
import com.mongodb.MongoClient; 

public class MorphiaQuery { 

MongoDBSingleton mongoInstance; 
private Datastore datastore; 
private Morphia morphia; 

private List<Company> friendsPostList = new ArrayList<Company>(); 

public List<Company> query() { 

    morphia = new Morphia(); 

    morphia.mapPackage("com.hifi.model"); 
    // create the Datastore connecting to the default port on the local 
    // host 
    datastore = morphia.createDatastore(new MongoClient(), 
    Constants.MONGO_DB); 
    // datastore.ensureIndexes(); 
    // mongoInstance = MongoDBSingleton.getInstance();// Get the 
    mongoDb 
    // connection 
    // datastore = mongoInstance.getDataStore(); 

    Query<Company> query = datastore.createQuery(Company.class); 

    Query<Employee> userQuery = datastore.createQuery(Employee.class); 

    userQuery.field("age").equal(12); 

    Employee emp = userQuery.get(); 
    System.out.println("Printing -------user " + emp); 
    query.criteria("emp").equal(emp); 
    // query.order("-postTimeStamp"); // Order by timestamp DESC 
    // query.limit(1); 
    friendsPostList = query.asList(); 

    return friendsPostList; 

} 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    MorphiaQuery m = new MorphiaQuery(); 
    System.out.println(m.query()); 

} 

} 

**控制台输出:**强大的文本****

Apr 09, 2017 12:30:06 PM 
org.mongodb.morphia.logging.MorphiaLoggerFactory chooseLoggerFactory 

INFO: LoggerImplFactory set to 
org.mongodb.morphia.logging.jdk.JDKLoggerFactory 

Apr 09, 2017 12:30:08 PM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Cluster created with settings {hosts=[127.0.0.1:27017], 
mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 
ms', maxWaitQueueSize=500} 

Apr 09, 2017 12:30:08 PM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Opened connection [connectionId{localValue:1, serverValue:26}] to 
127.0.0.1:27017 

Apr 09, 2017 12:30:08 PM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Monitor thread successfully connected to server with description 
ServerDescription{address=127.0.0.1:27017, type=STANDALONE, 
state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 2]}, 
minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, 
roundTripTimeNanos=970170} 

Apr 09, 2017 12:30:09 PM com.mongodb.diagnostics.logging.JULLogger log 
INFO: Opened connection [connectionId{localValue:2, serverValue:27}] to 
127.0.0.1:27017 
Printing -------user null 
[] 

我的JUnit测试用例

@Test 
    public void testCreateCompany() { 
    PostClient postClient = new PostClient(); 

    Company company = new Company(); 
    company.setCompanyName("ABC"); 
    company.setCompanyId(new ObjectId()); 
    company.setNumberOfEmployees("100"); 

    Employee user = new Employee(); 
    user.setName("siva"); 
    user.setAge(12); 
    user.setEmpId(new ObjectId()); 
    company.setEmp(user); 

    company = postClient.create(company); 
    assertNotNull(company); 

    } 

这是工作正常,直到昨天。 Btw iam使用吗啡1.3.1 maven依赖。请帮助!

回答

0

您在单元测试中保存公司对象,但忘记了员工。

公司类中的@Reference注释emp字段告诉Morphia只保存对Employee的引用,但它不会将该员工作为插入的一部分进行存储。

+0

您确定吗?因为我认为mongodb隐含地为你创建了用户文档。但我会试试这个肯定! –

+0

@PratikKulkarni是的,绝对。我自己尝试过。祝你好运! –