有一列太大了,它减慢了整个查询速度。所以我需要省略一个,只在实际需要时给出。我尝试过这个解决方案:
@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能实现吗?
这篇文章应该有帮助:如何使用JPA延迟加载实体属性
在此之前,我强烈建议您了解JPA中的延迟加载是什么以及它是如何工作的。这些可能会有所帮助:什么是Hibernate中的延迟加载?以及FetchType LAZY和EAGER在Java持久性API中的区别?