但是,首选解决方案(属性访问)在我的情况下不起作用(我缺少列异常-为什么?)
该模型如下所示:实体Parent和Child。表parent含有列child_id是PK的child表,以便它是典型的@ManyToOne关系。
Parent
Child
parent
child_id
PK
child
@ManyToOne
现在的问题是,如果我取Parent的实体,我需要有机会获得FK价值(亦称PK的Child实体),而不取Child实体。我怎样才能做到这一点?
FK
我使用的Annotations映射如下所示:
Annotations
@Entity @Table(name = "parent") public class Parent extends AbstractEntity { @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "patent_id", nullable = true) private Child child; @Column(name="child_id",insertable=false,updatable=false) private Integer childId; public Child getChild() { return patent; } public void setChild(Child child) { this.child = child; } public Integer getChildId(){ return childId; } }
我想做的是调用parent.getChild().getId()而无需Child从DB中额外获取实体。
parent.getChild().getId()
根据我上面提到的答案,如果我将注释从字段移到getter(在Parent实体上,我对吗?),请求的行为将是开箱即用的。然而,当我移动注释消气,我得到一个验证异常child柱缺失(好奇,为什么child不child_id为申报?)
PS: 显示的解决方法是将一FK列声明为单独的字段,效果很好,但我认为这不是应该这样做的方法。
好吧,在阅读以下文章http://256stuff.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml之后, 我意识到,属性访问应该是我要获取的属性,而不是实际的child对象。因此,将id访问权限AbstractEntity从字段更改为属性就可以了。
id
AbstractEntity