【问题标题】:Google App Engine JDO problemGoogle App Engine JDO 问题
【发布时间】:2010-07-20 09:11:51
【问题描述】:

如何存储复杂的对象?我在其子对象列表中有一个对象,在子对象中有四个子对象列表时调用makePersistent(person) 对象没有保存。救命!!!!!!!!!!!!

我打电话给 pm.makePersistent();但是列表

@Persistent
    private List<ChoosedElementEntity> choosedElements = new ArrayList<ChoosedElementEntity>();

    @Persistent
    private List<PleasantElementEntity> pleasantElements = new ArrayList<PleasantElementEntity>();

    @Persistent
    private List<UnpleasantElementEntity> unpleasantElements = new ArrayList<UnpleasantElementEntity>();

    @Persistent
    private List<SetViewElementEntity> setViewElements = new ArrayList<SetViewElementEntity>();

没有保存!!!

示例:

@PersistenceCapable(table = "persons", identityType = IdentityType.APPLICATION)
public class PersonEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;   

    @Persistent
    private List<OfferEntity> offers = new ArrayList<OfferEntity>();
}

@PersistenceCapable(table = "offers", identityType = IdentityType.APPLICATION)
public class OfferEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;


    @Persistent
    private List<ChoosedElementEntity> choosedElements = new ArrayList<ChoosedElementEntity>();

    @Persistent
    private List<PleasantElementEntity> pleasantElements = new ArrayList<PleasantElementEntity>();

    @Persistent
    private List<UnpleasantElementEntity> unpleasantElements = new ArrayList<UnpleasantElementEntity>();

    @Persistent
    private List<SetViewElementEntity> setViewElements = new ArrayList<SetViewElementEntity>();
}


@PersistenceCapable(table = "offer_selections", identityType = IdentityType.APPLICATION)
public class ChoosedElementEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent
    private String code;

    @Persistent
    private Text cmComments;
}

@PersistenceCapable(table = "offer_selections", identityType = IdentityType.APPLICATION)
public class PleasantElementEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent
    private String code;

    @Persistent
    private Text cmComments;
}

@PersistenceCapable(table = "offer_selections", identityType = IdentityType.APPLICATION)
public class UnpleasantElementEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;

    @Persistent
    private String code;

    @Persistent
    private Text cmComments;
}

【问题讨论】:

  • 阅读我的答案,您的注释显然不正确,如谷歌文档中所述。
  • 请告诉我如何正确!!!

标签: java google-app-engine jdo


【解决方案1】:
  • 检查您将对象层次结构中的所有类声明为@PersistenceCapable
  • 检查您是否按照google documentation 声明了列表/设置对象变量? IE:
    @Element(dependent = "true") 
    private Set tags = new HashSet(); 
    
  • 您是否尝试过使用makePersistentAll(person)
  • 检查您的数据是否真的保存在http://localhost:8888/_ah/admin/查看您的数据
  • 您要关闭持久性处理程序吗?即pm.close()。在您关闭处理程序之前,数据永远不会保留,即:
    // All objects are manupliated using a pm object
    PersitenceManager pm = PMF.instance().getPersistenceManager();
    // do work
    // Store the changes
    pm.close()
    

【讨论】:

  • 为什么@Element(dependent = "true") ??
  • strust object --> class person {list ls;} , class Offers{ List o1;List o2;List o2;}
  • @Element?.... 请参阅有关子父关系的文档:code.google.com/appengine/docs/java/datastore/…
  • 是的,终于关闭了 { if (null != pm) { pm.close(); }
【解决方案2】:

可能是对象之间的关系有问题? 尝试从复杂对象中手动保存每个对象

【讨论】:

  • 如果你保存一个子对象,当你持久化父对象时,你会得到一个异常,除非你让对象成为单独实体集的一部分。
【解决方案3】:

您似乎没有正确激活 JDO 中的生成器主键。这不是 JDO 的错误吗?

我找到了:

“当前存在阻止拥有的一对多关系的错误 父母和孩子是同一个班级,很难 对树结构进行建模。这将在未来的版本中修复。你 可以通过存储显式 Key 值来解决此问题 父母或子女。”

http://code.google.com/intl/en-EN/appengine/docs/java/datastore/usingjdo.html

我等不及修复了,所以我已经解决了这个问题 通过拥有我的所有此类实体来发出问题:

  • 具有相同的实体组父级(不同类)
  • 使用 ArrayList 的键值来存储每个实体的“子实体”
  • 使用键值来存储每个实体的“父级”(根实例为 null,即使它仍有一个实体组父级)。

【讨论】:

    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 2012-01-25
    • 2010-12-11
    • 2011-12-28
    • 2011-06-19
    • 1970-01-01
    • 2023-04-03
    • 2013-01-11
    相关资源
    最近更新 更多