提问者:小点点

使用JPA检索特定的多值关联列


有一列太大了,它减慢了整个查询速度。所以我需要省略一个,只在实际需要时给出。我尝试过这个解决方案:

@Query("SELECT new Account (a.name) From Account a Where a.id = :id)

上面的代码将检索id列数据。当我尝试使用其他getter时,显然rest属性都是空的。但是当它带有其他实体关系时,例如:

//The account entity code
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    @NotFound(action = NotFoundAction.IGNORE)
    private User user;
/**
The user side code is ommitted
**/
@Query("SELECT new Account (a.name,a.user) From Account a)

它将生成这些sql查询:

inner join
        user user3_ 
            on account0_.user_id=user3_.id 

但是,当我们使用普通的jpa方法时,例如

@Query("SELECT a FROM Account a WHERE a.id = :id")
Account getById(UUID id)

我们可以使用getter方法轻松获取用户实体:

Account acc = accountRepository.getById(id);
User user = acc.getUser();

不是内连接的sql查询;

如何使用getter检索同义词关联实体列?

用jpa能实现吗?


共1个答案

匿名用户

这篇文章应该有帮助:如何使用JPA延迟加载实体属性

在此之前,我强烈建议您了解JPA中的延迟加载是什么以及它是如何工作的。这些可能会有所帮助:什么是Hibernate中的延迟加载?以及FetchType LAZY和EAGER在Java持久性API中的区别?