我们可以同时为变量之一添加@Column和@OneToOne吗?

时间:2019-06-11 10:05:09

标签: java hibernate jpa hibernate-annotations

我有2张桌子

  • 表a-id,b_id,名称

  • 表b-ID,名称

当我必须创建POJO实体时,我希望将b_id作为列以及外键来从b获取值。

3 个答案:

答案 0 :(得分:0)

没问题。但是您必须在b_id列或关系中将该列标记为只读。

示例1只读的列:

public class A {

    @Column(insertable = false, updateable = false)
    private Integer bId;

    @ManyToOne
    private B b;

}

示例2只读关系:

public class A {

    private Integer bId;

    @JoinColumn(name="b_id", insertable = false, updatable = false)
    @ManyToOne
    private B b;

}

答案 1 :(得分:0)

最干净的方法是仅映射外键并访问B实例上的ID:

A a = em.find(A.class, 1L);
Long bid = a.getB().getBid();

这应该不会引起任何性能问题,但是在特定情况下会引起性能问题-有可用的特定解决方案。

其他方法也是可行的,但是最终您将在两处编码单个数据,并使它们保持同步将是问题和细微错误的源头。

答案 2 :(得分:0)

@JoinColumn字段使用@Column注释而不是Mapped。进一步了解JoinColumn at this link