如何使用JPA保存对实体的更改

时间:2016-06-12 13:53:55

标签: java jpa ejb

我有一个实体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)。如何保存它们以便我可以获取特定用户的页面?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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