我有一个JPA实体,该实体具有通过以下方式声明的属性

 @OneToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinColumn(name = "userId", referencedColumnName = "id", insertable = false, updatable = false)
    private UserBare user;


(UserBare是我创建的虚拟实体,因为我需要某个日期,所以它是User obj的简化版本,并非所有User obj都可用于该实体。是否有更好的方法来解决此问题?

这是一个便利属性,我在读取此实体时仅使该实体可使用userBare对象。但是,当我实际编写该实体时,它似乎在数据库中创建了“用户”的新条目(而不是更新)。我已经有insertable = false,updatable = false,但它仍会写入数据库。我尝试删除CascadeType声明,但这引发了错误。

这是添加不需要的行(最后3个)后的数据库快照。我也注意到删除原始实体并不会删除这三个不需要的行。所以我想JPA正在存储它们,但是对原始实体的引用是完整的。

最佳答案

我想说的是,如果未将Optional设置为true,则“ OneToOne”的意思是“ OneToOne”,排除了“ OneToZero”的可能性:

@OneToOne(optional=true)


但是只是一个猜测..我不确定

10-07 18:48