使用“ Spring Data Jpa查询”检索“休眠代理对象”列表

时间:2019-03-01 21:37:01

标签: java hibernate spring-data-jpa querydsl

我可以通过 Spring Data Jpa查询以某种方式检索休眠代理对象的列表吗?

我从请求中获得了对象ID,并且我不想检索它们(因为实体中存在许多OneToOne关系),但是我想检索将包含其ID的代理(我需要这个用于关联)。我想要类似Hibernate findOne()getOne()的东西,但要得到列表结果。

任何建议将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:0)

如果我对您的问题正确无误,您想执行以下操作:

地理空间存储库查询(不需要@Query注释)

public interface PersonRepository extends JpaRepository<Person, String>
List<Person> findByLocationNear(String location, Integer distance);
List<Person> findByCity(String city);
}

但是,您也可以在存储库中使用JQL查询方法

@Query("SELECT p FROM Person t WHERE p.name =?1 AND p.location=?2 ") 
List<Person> findPersonByLocation(String fName, String location);

此外,您可以使用HQL

答案 1 :(得分:0)

正确的解决方案是使用EntityManager实例。

entityManager.getReference(YourClass.class, id);

由于此方法仅接受一个I​​D,因此您需要编写一个自定义SQL查询(使用HQL或本机SQL)以仅检索 ID 所需的对象。

拥有List<T> ids,您可以

final List<YourClass> proxyValues = 
         ids.stream()
            .map(id -> entityManager.getReference(YourClass.class, id))
            .collect(Collectors.toList());

说到性能,这非常好,因为数据库访问将一次完成,只检索少量数据。