Сохранение данных в GAE - объект не может иметь первичный ключ Long и быть дочерним объектом - PullRequest
4 голосов
/ 17 ноября 2009

Нам трудно сохранять данные в нашем проекте Google App Engine, у нас есть классы "Клиент", "Резервирование" и "Комната".

Наша цель состоит в том, чтобы отобразить взаимосвязь между ними, с отношением один-ко-многим от Клиента к бронированию и отношением один-ко-многим из комнаты с одним и тем же резервированием.

Исключение, которое мы получаем:

Ошибка в метаданных для no.hib.mod250.asm2.model.Reservation.id: не может иметь первичный ключ java.lang.Long и быть дочерним объектом (владельцем является no.hib.mod250.asm2. model.Customer.res).

Наш код выглядит следующим образом:

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;  
    (...)  
}

1 Ответ

11 голосов
/ 17 ноября 2009

Как следует из сообщения, вы не можете использовать long в качестве первичного ключа, если ваша сущность является дочерней сущностью, что в данном случае верно. Вместо этого используйте ключ или закодированную строку в качестве первичного ключа - подробности см. здесь .

Возможно, вам также следует прочитать дочерние объекты и отношения .

...