0

我有一个实体 A,它与另一个实体 B 具有一对一的映射关系,并且休眠是延迟加载的。我想要它,以便可以直接从实体 A 检索实体 B 或仅检索实体 B 的外键。

public class A{
    private long bfk;
    private B b;
    //setters/getters...
}

我正在寻找的行为是当我检索实体 A 时,bfk 将填充正确的外键值(但仍然不会设置 b)。当我 getB() 时,休眠将检索到正确的实体。同样从设置方面来看:当我 setB() 休眠将正确地用外键填充 idOfB 。当我 setBfk() 时,如果我检索 getB(),休眠将返回正确的实体。这可能吗,最好有注释?

只是想补充一点,我认为这可能与这个问题有些相似,但我也想拥有实体,而不仅仅是 fk。

非常感谢您提前。

4

1 回答 1

0

我发现这实际上是不可能的,因为能够通过 fk 或实体进行更新。Hibernate 不允许你这样做,这是完全有道理的。但是,您可以同时填充两者,您只需选择哪一个是可更新/可插入的。你让这两个属性都指向同一个 fk 列,你就是金子。因此,一旦您知道这一点,这个问题就会变得更加相似,因此它会得到支持。无论哪种方式,这是可能的注释版本:

public class A{
    @Column(name="b_id")
    private long bfk;
    @OneToOne
    @JoinColumn(name="b_id", insertable=false, updatable=false)
    private B b;
    //other stuff...id, setters/getters etc.
}

至少在我的情况下,我认为将 fk 作为可插入/可更新属性要好得多。

于 2013-06-20T20:44:18.957 回答