【问题标题】:Updating JDO Embeded Entity Field更新 JDO 嵌入实体字段
【发布时间】:2013-04-13 19:38:46
【问题描述】:

我正在使用 JDO 嵌入式实体。我已经通过this tutorial 很好地设置了父实体和子实体。我的问题是我似乎无法让我对子实体所做的更改持续存在。这是我的两个课程:

家长:

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

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String name;

    @Persistent
    @Embedded
    private TestEntitySub sub;

    public TestEntitySub getSub() {
        return sub;
    }

    public void setSub(TestEntitySub sub) {
        this.sub = sub;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

孩子:

@PersistenceCapable
@EmbeddedOnly
public class TestEntitySub {
    @Persistent
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

要修改的代码:

PersistenceManager pm = PMF.get().getPersistenceManager();
TestEntity test = pm.getObjectById(TestEntity.class, 75L); //object has id=75
test.getSub().setState("New State");    
pm.makePersistent(test);
pm.close();

代码运行没有错误,但数据存储区没有任何变化。我尝试了各种组合,包括持久化子对象、重置父对象中的子字段等,但没有效果。如果我修改父母的name 而不是孩子的state 它工作得很好。那么如何修改孩子的字段呢?

【问题讨论】:

    标签: google-app-engine jdo


    【解决方案1】:

    我仍然喜欢更合理的答案,但对于其他为此苦苦挣扎的人,我确实找到了解决方法:

    PersistenceManager pm = PMF.get().getPersistenceManager();
    TestEntity test = pm.getObjectById(TestEntity.class, 75L); //object has id=75
    TestEntitySub sub = test.getSub();  //Get the embedded entity
    sub = pm.detachCopy(sub);           //Make a detached copy
    sub.setState("New State");          //Update it
    test.setSub(sub);                   //set it as the new embedded entity
    pm.makePersistent(test);            //and persist the parent
    pm.close();
    

    缺点是 PM 必须制作嵌入对象的完整副本。我假设有更好的方法,所以如果你知道,请分享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      相关资源
      最近更新 更多