我们可以为其中一个变量同时添加 @Column 和 @OneToOne 注释吗?
Can we have @Column and @OneToOne both annotation for one of the variable?
我有2张桌子
Table一个-id,b_id,name
Table b - id , name
当我必须创建 POJO 实体时,我希望将 b_id 作为列以及从 b 获取值的外键。
没问题。但是您必须在 b_id 列或关系中标记 read-only 列。
示例 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;
}
最干净的方法是只映射外键并访问 B 实例上的 id:
A a = em.find(A.class, 1L);
Long bid = a.getB().getBid();
这应该不会导致任何性能问题,但对于特定情况,有特定的解决方案可用。
其他方法也是可能的,但您最终会在两个地方编码一个数据并保持它们同步将成为问题和细微错误的持续来源。
对 Mapped
字段使用 @JoinColumn
注释而不是 @Column
。阅读更多关于 JoinColumn
at this link
我有2张桌子
Table一个-id,b_id,name
Table b - id , name
当我必须创建 POJO 实体时,我希望将 b_id 作为列以及从 b 获取值的外键。
没问题。但是您必须在 b_id 列或关系中标记 read-only 列。
示例 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;
}
最干净的方法是只映射外键并访问 B 实例上的 id:
A a = em.find(A.class, 1L);
Long bid = a.getB().getBid();
这应该不会导致任何性能问题,但对于特定情况,有特定的解决方案可用。
其他方法也是可能的,但您最终会在两个地方编码一个数据并保持它们同步将成为问题和细微错误的持续来源。
对 Mapped
字段使用 @JoinColumn
注释而不是 @Column
。阅读更多关于 JoinColumn
at this link