java - 在 GAE 中保留数据 - 实体不能有长主键并且不能是子对象

标签 java google-app-engine jakarta-ee entity-relationship jdo

我们在 Google App Engine 项目中很难持久化数据,我们有类“Customer”、“Reservation”和“Room”。

我们的目标是映射这些之间的关系,从客户到预订的一对多关系以及从房间到同一预订的一对多关系。

我们得到的异常是:

Error in meta-data for no.hib.mod250.asm2.model.Reservation.id: Cannot have a java.lang.Long primary key and be a child object (owning field is 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;  
    (...)  
}

最佳答案

如消息所示,如果您的实体是子实体,则不能使用 long 作为主键,在这种情况下是正确的。相反,使用键或编码字符串作为主键 - 请参阅 here了解详情。

您可能还应该阅读 child objects and relationships .

关于java - 在 GAE 中保留数据 - 实体不能有长主键并且不能是子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1748667/

相关文章:

java - 仅当 JFrame 中的某些内容发生更改时才使 JButton 可单击

Java "ajp-9009-AsyncTimeout"java.lang.OutOfMemoryError : Java heap space Errors 错误

java - 我试图测试二维数组的范围值,但它一直循环

java - JAVA GAE 的 OpenID 消费者

java - GAE 上的 HttpClient

java - 使用 Objectify 查询 2 个实体

java - 查询 .list 和 .getResultList 之间的区别

java - EJB 2.1实体如何获取List而不是Collection?

java - 使用自定义 TimestampExtractor 的 Kafka Streams 窗口

java - 如何解决org.hibernate.hql.ast.QuerySyntaxException : Exception