Java @OneToOne JPA中未映射列

Java @OneToOne JPA中未映射列,java,spring-boot,hibernate,jpa,one-to-one,Java,Spring Boot,Hibernate,Jpa,One To One,我有两个实体(foo和bar),当我从foo映射时,所有工作正常: 因福 @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true) private Bar bar; 在酒吧里 @OneToOne(mappedBy = "bar", cascade = CascadeType.ALL, orphanRemoval = true) private Foo foo; @OneToOne(cascade = Cascad

我有两个实体(foo和bar),当我从foo映射时,所有工作正常:

因福

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
private Bar bar;
在酒吧里

@OneToOne(mappedBy = "bar", cascade = CascadeType.ALL, orphanRemoval = true)
private Foo foo;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
private Foo foo;
当我保存一个foo时,正如我预期的那样,包含的条的id存储在bar_id列中的新foo条目中

但如果我反过来做,在Foo中

@OneToOne(mappedBy = "foo", cascade = CascadeType.ALL, orphanRemoval = true)
private Bar bar;
在酒吧里

@OneToOne(mappedBy = "bar", cascade = CascadeType.ALL, orphanRemoval = true)
private Foo foo;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
private Foo foo;
我希望,当我保存一个Foo时,包含bar的Foo的id将存储在bar表中新条目的Foo_id列中,但在这种情况下总是null,当我得到它时,它就不起作用了

PS:我知道在第一种情况下工作已经足够了,但是对于一些约束,我会优先考虑第二种情况,另一方面,我想知道为什么在将来会发生这种情况

作为@SternK建议,我遵循文档中添加到Foo类的方法

    public void addBar(Bar bar) {
    bar.setFoo( this );
    this.bar = bar;
}

public void removeBar() {
    if ( bar != null ) {
        bar.setFoo( null );
        this.bar = null;
    }
}
但是foo_id列仍然是空的,当我得到foo时,我就得到了

{
    "id": 1,
    "name": "foo1",
    "bar": null
}

如果使用双向关联(usage
mappedBy
属性指明了它),则如中所述,应使两侧同步:

每当形成双向关联时,应用程序开发人员必须确保双方始终同步

这意味着您应该在
Foo
中使用以下方法:

@实体
公开课Foo
{
公共无效添加栏(栏)
{
这个.bar=bar;
bar.setFoo(本);
}
public void removeBar(){
如果(bar!=null){
bar.setFoo(空);
this.bar=null;
}
}
}

我不知道是否需要查看,但我注意到示例类是静态的,当我尝试将我的创建为静态时,Eclipse说:类Phone的非法修饰符;只有公开的、抽象的和最终的才允许我创建一个最小的应用程序来重现问题并提出具体问题