首页 > 解决方案 > 仅存储一个与 Hibernate 和 Spring 的双向 OneToOne 关系的实体

问题描述

情况

问题

用代码制定:

a = repositoryForA.findById(a);
b = a.getB();
a.setAttribute(abc);
b.setAttribute(xyz);
repositoryForA.save(a);

然而,我看到的行为是始终存储 A 和 B(通过测试和休眠日志验证)

我试过的

这可能吗?这种关系可能不适合这个目的吗?

实体

@Entity
public class A {

    @Id
    @GeneratedValue
    protected Long id;

    @OneToOne
    @PrimaryKeyJoinColumn
    private B b;

    // Some attributes...

}

@Entity
public class B {

    @Id
    protected Long id;

    @OneToOne(mappedBy = "b")
    @MapsId
    @JoinColumn(name = "id")
    private A a;

    // Some attributes...
    
}

标签: javaspringhibernatespring-data-jpaspring-data

解决方案


我使用了@K.Nicholas 提出的类似解决方案。我刚刚创建了一个实体副本B来进行临时计算。我没有打电话repositoryForB.save(b)。因此,在保存时只存储了自身a的属性。a


推荐阅读