【问题标题】:Hibernate: how to map a one-to-one where both the entity and foreign key are accessibleHibernate:如何在实体和外键都可以访问的情况下进行一对一的映射
【发布时间】:2013-06-16 08:22:39
【问题描述】:

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

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

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

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

非常感谢您。

【问题讨论】:

    标签: hibernate foreign-keys lazy-loading one-to-one


    【解决方案1】:

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

    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 作为可插入/可更新属性要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多