使用 JPA 检索特定的多值关联列
Using JPA to retrieve particular many-valued association columns
有一列太大了,拖慢了整个查询速度。
所以我需要省略那个,只在实际需要时才给。
我试过这个解决方案:
@Query("SELECT new Account (a.name) From Account a Where a.id = :id)
上面的代码将检索id列data.When我尝试使用其他getter,显然其余属性都是空的。
但是当它与其他实体关系一起出现时,例如:
//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实现吗?
这个post应该有帮助:How to lazy load an entity attribute using JPA
在此之前,我强烈建议您了解 JPA 中的延迟加载及其工作原理。这些可以帮助:What is lazy loading in Hibernate? and Difference between FetchType LAZY and EAGER in Java Persistence API?
有一列太大了,拖慢了整个查询速度。 所以我需要省略那个,只在实际需要时才给。 我试过这个解决方案:
@Query("SELECT new Account (a.name) From Account a Where a.id = :id)
上面的代码将检索id列data.When我尝试使用其他getter,显然其余属性都是空的。 但是当它与其他实体关系一起出现时,例如:
//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实现吗?
这个post应该有帮助:How to lazy load an entity attribute using JPA
在此之前,我强烈建议您了解 JPA 中的延迟加载及其工作原理。这些可以帮助:What is lazy loading in Hibernate? and Difference between FetchType LAZY and EAGER in Java Persistence API?