gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:37:30 30 4
gpt4 key购买 nike

我的问题的可能答案位于此处:
How can I retrieve the foreign key from a JPA ManyToOne mapping without hitting the target table?

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

模型如下所示:实体 ParentChild .表parent有列 child_id这是PKchild表,所以它是典型的 @ManyToOne关系。

现在的重点是,如果我获取 Parent实体,我需要访问 FK值(又名 PK 实体的 Child)而不获取 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来自数据库的实体。

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

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

最佳答案

OK,看完下面的文章http://256stuff.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml
我已经意识到,属性访问应该是我想要获取的属性,而不是实际的 child目的。所以改变id访问 AbstractEntity从田野到属性(property),成功了。

关于java - JPA + Hibernate - 如何在不获取该实体的情况下获取子实体的 FK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25885310/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com