Java – gae data store: persistent referenced objects

I tried to persist Java objects to the gae data store

I'm not sure how to persist objects with ("nontrivial") reference objects In other words, suppose I have the following

public class Father {
    String name;
    int age;
    Vector<Child> offsprings; //this is what I call "non-trivial" reference 
    //ctor,getters,setters...
}

public class Child {
    String name;
    int age;
    Father father; //this is what I call "non-trivial" reference 
    //ctor,setters...
}

The name field is unique in each type field and is treated as a primary key

In order to maintain the "normal" (string, int) field, I just need to add the correct comments So far, it's very good However, I don't understand how I should stick to the reference homemade (children, father) type Should I:

>Convert each such reference to hold the primary key (in this example, the name string) instead of the "actual" object, so vector < child > descendants; Change to vector < string > offspringsnames;? If this is the case, how do I handle objects at run time? I'm just from class Getname queries the primary key to retrieve the referenced object? > Convert each such reference to save the actual key provided to me when the data is stored in the correct put () operation? That is, vector < child > offspring; Change to vector < key > offspringshashkeys;?

I have read all official relevant gae documents / examples Throughout the process, they maintain "trivial" references that are locally supported by the data store (for example, in the guestbook example, strings and long integers only)

Solution

>Please refer to Google App Engine docs in the following sections for a clearer understanding (relationship, transaction)

For your question, you have several choices:

>Have a one to many relationship (objects will be in the same entity group). Here, you can have a child list in the parent (parent) This places all objects in the same entity group If you do not want to get children every time you get a parent, you can remove children from the default get group

@PersistenceCapable(identityType = IdentityType.APPLICATION,detachable = "true")
public class Father {
   @PrimaryKey
   @Persistent
   private String name;

   @Persistent
   private int age;

   @Persistent(mappedBy = "father",defaultFetchGroup = "false")
   private List childern;
}

@PersistenceCapable(identityType = IdentityType.APPLICATION,detachable = "true")
public class Child   {
   @Persistent
   @PrimaryKey
   private String name;

   @Persistent
   private Father dad;
}

>Unrelated relationships that store keys instead of references:

@PersistenceCapable(identityType = IdentityType.APPLICATION,detachable = "true")
public class Father {

   @PrimaryKey
   @Persistent
   private String name;

   @Persistent
   private int age;

   @Persistent
   private List childern;
}

@PersistenceCapable(identityType = IdentityType.APPLICATION,detachable = "true")
public class Child   {
   @Persistent
   @PrimaryKey
   private String name;

   @Persistent
   private Key dad;
}

In this case, you must manage referential integrity and ensure that they are in the same entity group if you have to update / add them in a single transaction

IMO, if I am modeling a real-world (father child) scenario, I will choose the route of "having a relationship", because, really, how many children can a person have;) Of course, there is another question, that is, how many fathers do you update at a time?

Hope this will help, cheer!

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>