mysql - 使用一对多关系进行关联时,JDO 尝试创建新记录

标签 mysql google-cloud-datastore jdo datanucleus

我正在使用datanucleus/MySQL5.6/Google App Engine1.9.4/JDO3.0/Spring3.0。

情况是,我有一个 User 类

@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;

}

我在UserUserSession之间有一对多的关系。在 UserSession 表中,我定义了一个引用 User 表的 userid(主键)的外键。

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

每次用户登录时,我都会在数据库中创建一条 UserSession 记录。我能够在数据库中成功创建用户记录。 当用户登录时,我正在创建一个 UserSession 对象,将之前检索到的 User 对象与 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();
        }
    }

请帮忙。 提前致谢。

最佳答案

如果对象处于 transient ,那么它将创建一个新对象,就像 JDO 规范所说的那样。并且日志会告诉您它处于什么状态,因此无需猜测。

关于mysql - 使用一对多关系进行关联时,JDO 尝试创建新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24096614/

相关文章:

java - 在应用程序引擎中过滤记录 (Java)

python - 谷歌数据存储 - 它会延迟加载吗?

mysql - 优化包含超过20个内联表的mysql查询

python - Google App Engine、数据存储和任务队列、性能瓶颈?

php - 针对一些未知数据的数据库表设计

java - 为什么在使用 JDO 时无法在 LinkedList 中添加保存超过 1 个对象?

java - JDO 没有字段被确定为主键字段

java - 在 GAE/J JDO 中持久存储内部类的正确方法是什么?

mysql - 随着长度的变化,删除十进制值中的尾随零

php - 用户和公司 - 数据库架构