Hibernate/JPA-如何在不触发延迟加载的情况下获取@manytone字段的id
例如,有一个具有Hibernate/JPA-如何在不触发延迟加载的情况下获取@manytone字段的id,hibernate,jpa,Hibernate,Jpa,例如,有一个具有@manytone(fetch=Lazy)字段“Team”的实体“User”。我使用了entityManager.find(User.class,userId)get用户。此时,若我调用user.getTeam()将向数据库发送一个查询以获取团队对象。有没有一种不需要额外查询就可以获取团队id的方法?出于这些目的,我会将该列映射两次。使用insert=“true”和update=“true”进行一次多对一操作 然后我附加一个TeamId属性,并将其映射为intinsert=“fa
@manytone(fetch=Lazy)
字段“Team”的实体“User”。我使用了entityManager.find(User.class,userId)
get用户。此时,若我调用user.getTeam()
将向数据库发送一个查询以获取团队对象。有没有一种不需要额外查询就可以获取团队id的方法?出于这些目的,我会将该列映射两次。使用insert=“true”
和update=“true”
进行一次多对一操作
然后我附加一个TeamId属性,并将其映射为intinsert=“false”
和update=“false”
。我使用公式
,而不是列
映射
在第一次选择之后,TeamId就可用了。如果您不想使用Hibernate,请在您的用户实体上添加@PostLoad方法,该方法将设置您的TeamId
@PostLoad
public void updateTeamIdInfos() {
if (getTeam() != null) {
setTeamId(getTeam().getId());
}
}
感谢您的建议,我们目前正在使用JPA注释,并试图避免使用特定于Hibernate的特性。你知道我是否可以用
@列(updateable=false,insertable=false)
来做这个吗?我会说就是这样。还要检查公式映射,因为我们将使用一列twicethanks作为回复,但这不适用于我非常具体的情况。我试图避免调用getTeam()函数,因为它会触发延迟加载。相关的问题是更多答案