我有一个JPA实体,它具有以下列方式声明的属性
@OneToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "userId", referencedColumnName = "id", insertable = false, updatable = false)
private UserBare user;
(UserBare是我创建的一个虚拟实体,它是用户obj的一个愚蠢的版本,因为我需要一些日期,而不是所有用户obj都可用于此实体。有更好的方法来解决这个问题吗?
这是一个方便的attr我只是在读取这个实体时使userBare对象可用于此实体。但是当我实际编写这个实体时,它似乎在数据库中创建了“user”的新条目(而不是更新)。我已经有insertable = false,updatable = false但它仍然写入数据库。我尝试删除CascadeType声明,但这是一个错误。
以下是添加不需要的行后的数据库快照(最后3个)。另外我注意到删除原始实体并没有删除这三个不需要的行。所以我猜JPA正在存储它们,但引用对原始实体来说是完整的。
答案 0 :(得分:1)
我的souspicioun将是“OneToOne”意味着“OneToOne”,如果您没有将Optional设置为true,则不包括“OneToZero”的可能性:
@OneToOne(optional=true)
但只是一个猜测..我不确定