Java JPA&x2B;Hibernate-如何获取子实体的FK而不获取该实体?
我的问题可能的答案如下: 然而,更好的解决方案(属性访问)在我的情况下不起作用(我得到了缺少列的异常-为什么?) 该模型如下所示:实体Java JPA&x2B;Hibernate-如何获取子实体的FK而不获取该实体?,java,hibernate,jpa,Java,Hibernate,Jpa,我的问题可能的答案如下: 然而,更好的解决方案(属性访问)在我的情况下不起作用(我得到了缺少列的异常-为什么?) 该模型如下所示:实体父对象和子对象。表parent有一列child\u id,它是child表的PK,因此它是典型的@manytone关系 现在的问题是,如果我获取父实体实体,我需要在不获取子实体的情况下访问FK值(即子实体的PK)。我该怎么做 我使用注释,我的映射如下所示: @Entity @Table(name = "parent") public class Parent e
父对象和子对象。表parent
有一列child\u id
,它是child
表的PK
,因此它是典型的@manytone
关系
现在的问题是,如果我获取父实体
实体,我需要在不获取子实体的情况下访问FK
值(即子实体的PK
)。我该怎么做
我使用注释
,我的映射如下所示:
@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
entity我说得对吗?),请求的行为将是开箱即用的。然而,当我将注释移动到getter时,我会得到一个验证异常,即child
列丢失(奇怪的是,为什么child
不是child\u id
声明?)
PS:显示了将FK
列声明为单独字段的变通方法,效果很好,但我认为这不是应该采用的方法。阅读以下文章后,确定
我已经意识到,属性访问应该是我想要获取的属性,而不是实际的子对象。因此,将id
对AbstractEntity
的访问权从字段更改为属性就可以了。我认为,在执行延迟加载时,hibernate甚至不会获取该列。因此,如果您希望在不获取数据的情况下显示,您应该使用本机查询。我使用criteriaapi
Try@Formula annotation并键入所需内容,这不是一个选项。可能有用。不tested@dinesh707这不是JPA annotationorg.hibernate.annotations.Formula;