4

Google App Engineプロジェクトでデータを保持するのに苦労しています。クラスは「顧客」、「予約」、「部屋」です。

私たちの目標は、顧客から予約への1対多の関係と、部屋から同じ予約への1対多の関係を使用して、これらの間の関係をマッピングすることです。

例外は次のとおりです。

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

1 に答える 1

11

メッセージが示唆するように、エンティティが子エンティティである場合、主キーとして long を使用することはできません。これはこの場合に当てはまります。代わりに、キーまたはエンコードされた文字列を主キーとして使用してください。詳細については、こちらを参照してください。

おそらく、子オブジェクトと関係についても読む必要があります。

于 2009-11-17T15:02:11.743 に答える