【问题标题】:How to save changes to an Entity using JPA如何使用 JPA 保存对实体的更改
【发布时间】:2016-06-12 13:53:55
【问题描述】:

我有一个实体 User 和一个实体 UserPage 创建用户时,用户没有 UserPage
现在我想创建一个用户页面并将其分配给用户。这看起来像这样:

UserPage page= new UserPage([Attributes here]);
User user; (this is a User previously created, persisted and now fetched)

现在我执行以下操作:

user.setUserPage(page);
userPageEJB.persist(page);

现在当我想获取用户的 userPage 时,我会这样做:

User user= userEJB.getUserByID([userID here]);
UserPage page= user.getUserPage();

现在的问题是,更改似乎没有保存(最后一行代码总是返回 null)。如何保存它们以便获取特定用户的页面?

【问题讨论】:

  • 显示周边代码。所有这些都在同一个事务中运行吗?这是如何管理的?

标签: java jpa ejb


【解决方案1】:

如果 User 和 UserPage 有父子关系,则使用CascadeType 映射。使用此映射 JPA 会将实体状态的更改转换为相应的 DML 语句:

class User{
@OneToOne(mappedBy = "user",
    cascade = CascadeType.PERSIST)
private UserPage userPage;
....
}

【讨论】:

    【解决方案2】:

    首先要检查的是 UserPage 和 User 关系的 CascadeType ,你需要至少有一个 CascadeType.PERSIST ,你也可以使用 CascadeType.ALL 取决于你所做的关系的定义。第二件事是检查您的代码是否已在单个事务中执行(无论是BTM 还是CTM),以确保所有修改都已刷新到数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2023-03-23
      • 1970-01-01
      • 2010-10-19
      相关资源
      最近更新 更多