【发布时间】:2019-12-21 15:50:57
【问题描述】:
首先,我没有给这个问题一个合适的标题。随时更新。
问题陈述
我有以下实体:
@Entity
public class Session {
@Column(name = "last_screen_id")
private Long lastScreenId;
@JoinColumn(name = "last_screen_id", referencedColumnName = "id", insertable = false, updatable = false)
@OneToOne
private Screen lastScreen;
// Getters and setters for lastScreenId
// Getter for lastScreen (I don't have a setter for lastScreen object since lastScreen object is marked as insertable=false and updatable=false)
}
如果我更新lastScreenId,我希望更新lastScreen 对象。例如,我使用session.setLastScreenId(2) 将lastScreenId 从1 设置为2 我希望lastScreen 对象成为ID 为2 的对象
所以这是我尝试过的:
-
只需更新
lastScreenId。我预计lastScreen对象会更新,因为session对象仍然是 MANAGED 实体失败,因为
lastScreen对象仍然是前一个对象 -
更新
lastScreenId并使用SessionRepository保存session对象,并将当前session对象替换为保存在数据库中的新session对象session= sessionRepository.save(screen);由于
lastScreen对象未从数据库中提取而失败 -
使用另一种方法保存
session与不同的事务@Transactional(Transactional.TxType.REQUIRES_NEW) public Session saveSessionInANewTransaction(Session session) { return sessionRepository.save(session); }这个也失败了。
【问题讨论】:
-
这不是您更新参考的方式。删除
lastScreenId字段并将@JoinColumn设置为insertable = true, updatable = true。然后将整个Screen对象设置为Session,然后将该更改保存到数据库 -
@XtremeBaumer 这更像是一个答案而不是评论。如果您能得到完整的答案,请将其添加为一个:)
标签: java hibernate spring-data-jpa