【问题标题】:Getting a child's parent in JDO在 JDO 中获取孩子的父母
【发布时间】:2014-07-06 03:56:13
【问题描述】:

我遇到了孩子没有参考其父母的问题。假设我已经建立了双向关系,我可以从父母那里得到孩子,从孩子那里得到父母;但是我孩子的父母总是空手而归。

我有一个父母,

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Company {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent(mappedBy = "company")
    private List<Employee> employees = new ArrayList<Employee>();
}

有一个孩子,

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private Company company;

    @Persistent
    private String username;
}

我将对象持久化,

Company newCompany = new Company();
Employee newEmployee = new Employee();
newEmployee.setUsername("ryan");
newCompany.getEmployees().add(newEmployee);
pm.makePersistent(newCompany);

我正在像这样访问对象,

Query query = pm.newQuery(Employee.class,"username == s");
query.declareParameters("String s");
List<Employee> employees = (List<Employee>)query.execute(username);
pm.close();

if (employees.size() > 0)
{
    Employee employee = employeeList.get(0);
    ...
}

然后我在调试时看到“公司”为空,而员工的其余字段已填充。对我缺少的东西有什么想法吗?

【问题讨论】:

  • 关心分享你是如何检索对象的,你在哪里检查的东西是空的......请输入任何事务开始/提交边界和/或对象生命周期状态
  • 已提供其他详细信息。
  • 对象处于什么状态?持久清洁?分离?如果分离,您是否要求将公司字段分离? JDOHelper.getObjectState(obj).
  • 状态似乎是“暂时的”。没有提出分离请求。
  • 因此该字段将为空,即不再管理它们(pm 已关闭等)。建议您多注意从哪里获取对象以及关闭 PM 的位置

标签: java google-app-engine google-cloud-datastore jdo


【解决方案1】:

根据对象状态,获取父对象取决于您检查它的位置。如果此时您的 PM 已关闭,则它不会获取父字段。在关闭 PM 之前触摸父字段(并将 retainValues 设置为 true,或在 PM 关闭时分离)将导致父字段被设置。

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 2015-08-30
    • 2013-06-04
    • 2018-01-29
    • 2019-05-02
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多