Mysql JDO在使用一对多关系进行关联时尝试创建新记录

Mysql JDO在使用一对多关系进行关联时尝试创建新记录,mysql,google-cloud-datastore,jdo,datanucleus,Mysql,Google Cloud Datastore,Jdo,Datanucleus,我使用的是datanucleus/MySQL5.6/googleappengine1.9.4/JDO3.0/Spring3.0 情况是,我有一个用户类 @PersistenceCapable(table="Users") public class User { @PrimaryKey @Persistent(column="UserID", valueStrategy=IdGeneratorStrategy.NATIVE) private Long ID; //s

我使用的是datanucleus/MySQL5.6/googleappengine1.9.4/JDO3.0/Spring3.0

情况是,我有一个用户类

@PersistenceCapable(table="Users")
public class User {
    @PrimaryKey
    @Persistent(column="UserID", valueStrategy=IdGeneratorStrategy.NATIVE)
    private Long ID;
    //some more fields below
}
我有一个UserSession类

@PersistenceCapable(table="usersessions")
public class UserSession extends DomainObject {

    private static final long serialVersionUID = 1L;

    @PrimaryKey
    @Persistent(column="SessionID", valueStrategy=IdGeneratorStrategy.NATIVE)
    private Long ID;

    @Persistent
    @Column(name="UserID")
    private User user;

}
我在用户对用户会话之间有一对多关系。在UserSession表中,我定义了一个外键,它引用用户表的useridprimary键

当用户第一次注册时,我创建了用户记录

每次用户登录时,我都会在数据库中创建一个UserSession记录。我能够在数据库中成功创建用户记录。 当用户登录时,我正在创建一个UserSession对象,将以前检索到的用户对象关联到UserSession对象

当我持久化UserSession时,它试图在数据库中创建一个新的用户记录

我只想将现有用户记录与新创建的UserSession对象相关联

我不想有一对多的双向关联

下面是创建UserSession对象的代码

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public UserSession createSession(User user, String sessionId) {
        PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
        try {
            UserSession userSession = new UserSession();
            userSession.setAppSession(sessionId);
            userSession.setUser(user);
            pm.makePersistent(user);
            return userSession;
        } finally {
            pm.close();
        }
    }
请帮忙。
提前感谢。

如果对象处于瞬态,那么它将创建一个新对象,就像JDO规范所说的那样。日志会告诉你它处于什么状态,所以不需要猜测


如果不需要新对象,则在调用makePersistent时,将托管的持久清理、空心等或分离对象传入。

用户处于什么生命周期状态?独立的转瞬即逝的空洞的没有这些信息,我看不出你怎么能理解它。日志上写着?我使用persistenceManager检索用户,然后关闭它。然后我尝试使用另一个persistenceManager创建一个UserSession对象。我认为用户对象现在处于瞬态状态。日志显示,请求失败是因为它试图再次插入用户对象,而失败是因为一个唯一的约束。