JPA + Hibernate – 如何在不获取该实体的情况下获取子实体的FK?

我的问题的一个可能的答案位于: 如何从JPA ManyToOne映射中检索外键而不命中目标表?

但是,最好的解决方案(属性访问)在我的情况下不起作用(我失踪列exception – 为什么?)

该模型如下所示:实体ParentChild 。 表parent具有列child_id ,它是child表的PK ,因此它是典型的@ManyToOne关系。

现在重点是,如果我获取Parent实体,我需要访问FK值(也就是Parent实体的PK )而不需要获取子实体。 我怎样才能做到这一点?

我使用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()而不从DB中获取Child实体的额外提取。

根据我上面提到的答案,如果我将注释从字段移动到getter(在Parent实体中我是对的吗?),请求的行为将是开箱即用的。 但是,当我将注释移动到getter时,我得到一个validationexception,即child列丢失(好奇,为什么child not child_id声明?)

PS:FK列声明为单独字段的显示解决方法工作正常,但我不认为这是应该这样做的方式。

好了,看了下面的文章http://256stuff.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml我已经意识到,属性访问应该是我想要获取的属性,而不是实际的child对象。 因此,将AbstractEntity id访问权限从字段更改为属性,就可以了。