如何使用查询从存储库中读取实体的特定变量?

How to read specific variables of an entity from repository using a query?

假设我们有一个具有 10 个变量的持久实体对象,如果我这样做,例如 repository.read(id)repository.findById(id) 我将取回一个实体对象,其中包含从存储库中设置的每个变量.

有没有什么方法可以使用 JPAQuery 或 EntityManager 或任何其他可能的方法,使我可以在存储库上进行调用并取回实体对象,但又不会获取特定变量?

我尝试了以下方法,但它似乎没有做任何事情,仍然将 Set 带入响应中:

JPAQuery<Fruit> query = new JPAQuery<>(entityManager);
QFruit fruit = QFruit.Fruit;
Set<Apple> apple = new HashSet<Apple>();
query.select(fruit).from(fruit).where(fruit.id.eq(fruitId))
.createQuery().getParameters().remove(apple);
return query.fetchOne();

您可以使用任何自定义 POJO 获取结果并指定选择的内容。

https://docs.oracle.com/html/E13946_05/ejb3_langref.html#ejb3_langref_constructor

public interface AppleRepository extends CrudRepository<Apple, Long> {
    @Query("SELECT new com.mypackage.Apple(a.field1, a.field2) FROM " +
           "    Apple a ")
    List<Apple> findCustomApples();
}

其他方法是使任何特定列延迟加载。您可以使用注释来做到这一点。

最终我试图从 Table 的条目中读取特定数据,因为特定 table 的数据太多,影响了性能,因此整个实体仅用于 1或 2 个变量不正确。 最终帮助我的是 Tuple。 使用 JPAQuery 的优势在于您可以 select 从搜索中返回特定变量。 例如

    JPAQuery<MyObject > query = new JPAQuery<>(entityManager);
    MyObject myObject  = QMyObject.MyObject ;
    Tuple response = query.select(myObject.id, myObject.version)
    .where(myObject.id.eq("12345")).or(myObject.version.eq("12345")).fetchaAll();

然后您可以轻松检索 Tuple 对象并将值作为数组处理。