一尘不染

JPA + Hibernate-如何在不获取子实体的情况下获取其子实体?

hibernate

但是,首选解决方案(属性访问)在我的情况下不起作用(我缺少列异常-为什么?)

该模型如下所示:实体ParentChild。表parent含有列child_idPKchild表,以便它是典型的@ManyToOne关系。

现在的问题是,如果我取Parent的实体,我需要有机会获得FK价值(亦称PKChild实体),而不取Child实体。我怎样才能做到这一点?

我使用的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中额外获取实体。

根据我上面提到的答案,如果我将注释从字段移到getter(在Parent实体上,我对吗?),请求的行为将是开箱即用的。然而,当我移动注释消气,我得到一个验证异常child柱缺失(好奇,为什么childchild_id为申报?)

PS: 显示的解决方法是将一FK列声明为单独的字段,效果很好,但我认为这不是应该这样做的方法。


阅读 213

收藏
2020-06-20

共1个答案

一尘不染

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

2020-06-20