Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate/JPA-如何在不触发延迟加载的情况下获取@manytone字段的id_Hibernate_Jpa - Fatal编程技术网

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属性,并将其映射为int
insert=“false”
update=“false”
。我使用
公式
,而不是
映射


在第一次选择之后,TeamId就可用了。

如果您不想使用Hibernate,请在您的用户实体上添加@PostLoad方法,该方法将设置您的TeamId

  • 添加@Transient teamId属性
  • 添加@PostLoad方法:
  • 添加@PostLoad方法

    @PostLoad
        public void updateTeamIdInfos() {
            if (getTeam() != null) {
                setTeamId(getTeam().getId());
            }
        }
    

    感谢您的建议,我们目前正在使用JPA注释,并试图避免使用特定于Hibernate的特性。你知道我是否可以用
    @列(updateable=false,insertable=false)
    来做这个吗?我会说就是这样。还要检查公式映射,因为我们将使用一列twicethanks作为回复,但这不适用于我非常具体的情况。我试图避免调用getTeam()函数,因为它会触发延迟加载。相关的问题是更多答案