2010-07-20 123 views
0

如何存储复杂的对象?在调用makePersistent(person)对象时,在子对象的子对象列表中有一个对象有四个子对象列表。帮帮我!!!!!!!!!!!!Google App Engine JDO问题

我打电话给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; 
} 
+0

请阅读我的回答,您的注释显然不正确,正如Google文档中所述。 – corydoras 2010-07-21 00:45:34

+0

请告诉我如何正确! – Artem 2010-07-21 05:01:32

回答

2
  • 检查你声明的所有对象层次中的类如@PersistenceCapable
  • 检查你声明的列表/设置对象变量为每google documentation?即:
     
    @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() 
    
+1

为什么@Element(dependent =“true”)? – Artem 2010-07-20 09:40:46

+0

strust object - > class person {list ls;},class Offers {List o1; List o2; List o2;} – Artem 2010-07-20 09:43:11

+0

@Element?....请参阅有关子女父母关系的文档:http://code.google.com/appengine/docs/java/datastore/relationships.html – Jacob 2010-07-20 10:00:25

0

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

+0

如果您保存一个子对象,那么当您坚持父对象时,您将得到一个异常,除非您将这些对象设置为单独的实体集的一部分。 – Jacob 2010-07-20 11:17:19

+0

是的,你说得对! – 2010-07-22 13:46:34

0

看起来您没有在JDO中正确激活生成器主键。这不是JDO的错误?

我发现:

“目前的一个错误阻止拥有一个一对多的关系 在父母和孩子都是同一类,因此很难 以树形结构模型中,这将是。在未来版本中修复,您可以通过为 家长或孩子存储显式键值来解决此问题。“ ”。

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

我不能等待修复,所以我已经通过让我这种类型的所有实体解决此 问题的工作:

  • 具有相同父实体组(的不同的类)
  • 使用ArrayList < [实体]>键值来存储每个实体的“子”
  • 使用键值存储每个实体的“父”(null为即使它仍然有一个实体组父项)。