2

当我尝试提交事务时,我得到:

javax.persistence.RollbackException: Transaction failed to commit
javax.persistence.PersistenceException: Object with id "" is managed by a different 
org.datanucleus.exceptions.NucleusUserException: Object with id "" is managed by a different Object ManagerObject Manager

我的代码是:

@Entity
public class Profile implements Serializable
{
    private static final long serialVersionUID = 1L;
    @Id     
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long profileId;

    private String m_Name;    
    private String m_Email;
    private String m_Password;  

    @ManyToOne()
    private List<MyPoint> m_points = null;
    .
    .
}

@Entity
public class MyPoint  implements Serializable 
{
    private static final long serialVersionUID = 1L;    
    @Id
    private int pointId;

    private int m_LatitudeE6;
    private int m_LongitudeE6;
    .
    .
}
  • 如果我用他的注释删除 m_points 一切正常。
  • 我将 JPA 1.0 与 Google App Engine 一起使用
    我做错了什么?
    谢谢。
4

1 回答 1

1

不是 GAE 专家,但您的实体映射有一些明显的问题需要修复。

首先,将 a 应用于列表是没有意义@ManyToOne的(想想看,当您使用该注释时,您表示实体中的许多都与映射实体之一相关)。

其次,您没有为嵌入的点集合指定实际的映射列。您必须在点类上定义从点到轮廓的映射,或者使用连接表。下面是一个例子(非常粗略的伪代码):

@Entity
public class Profile implements Serializable { 

    @OneToMany(mappedBy = "profile")
    private List<MyPoint> m_points = null;
}

@Entity
public class MyPoint implements Serializable {

    @ManyToOne
    @JoinColumn(name = "profileId")
    private Profile profile;
}

很明显,上面的示例假定profileIdMyPoint 表中有一个外键,它引用了 Profile 表上的主键。

于 2012-06-19T23:38:33.307 回答