2009-11-17 2 views
4

Nous avons des difficultés à conserver des données dans notre projet Google App Engine, nous avons les classes "Client", "Réservation" et "Chambre ".Données persistantes dans GAE - Entité ne peut pas avoir une clé primaire Long et être un objet enfant

Notre objectif est de cartographier une relation entre ceux-ci, avec une relation un-à-plusieurs du client à la réservation et une relation un-à-plusieurs de la pièce à la même réservation.

L'exception que nous obtenons est:

Erreur dans les méta-données pour no.hib.mod250.asm2.model.Reservation.id: ne peut pas avoir une clé primaire java.lang.Long et être un enfant objet (le champ propriétaire est no.hib.mod250.asm2.model.Customer.res).

Notre code est le suivant:

Customer.java

@PersistenceCapable(identityType=IdentityType.APPLICATION) 
public class Customer implements Serializable { 
    @PrimaryKey 
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) 
    private Long id; 
    (...) 
    //an customer has one or more reservations. 
    @Persistent(mappedBy="customer") 
    private List <Reservation> res; 
    (...) 
} 

Room.java

@PersistenceCapable(identityType=IdentityType.APPLICATION) 
public class Room implements Serializable { 
    @PrimaryKey 
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) 
    private Long id; 
    (...) 
    //a room has one or more reservations 
    @Persistent(mappedBy="room") 
    private List<Reservation> res; 
    @Persistent 
    private Hotel hotel; 
    (...) 
} 

Reservation.java

@PersistenceCapable(identityType=IdentityType.APPLICATION) 
public class Reservation implements Serializable { 
    @PrimaryKey 
    @Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY) 
    private Long id; 
    (...) 
    @Persistent 
    private Room room; 
    @Persistent 
    private Customer customer; 
    (...) 
} 

Répondre

11

Comme le message l'indique, vous ne pouvez pas utiliser que votre clé primaire si votre entité est une entité enfant, ce qui est vrai dans ce cas. Au lieu de cela, utilisez une clé ou une chaîne codée comme clé primaire - voir here pour plus de détails.

Vous devriez probablement lire également sur child objects and relationships.

Questions connexes