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

时间:2019-06-12 15:19:36

标签: java jpa entitymanager

假设我们有一个包含10个变量的持久化Entity对象,例如,如果我做repository.read(id)repository.findById(id),我将获得一个带有存储库中设置的每个变量的Entity对象。 / p>

是否可以使用JPAQuery或EntityManager或其他任何可能的方式,在存储库上进行调用并返回Entity对象BUT,而无需获取特定变量?

我尝试了以下操作,但是它似乎什么也没做,仍然将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();

2 个答案:

答案 0 :(得分:1)

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

  

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

declare 
c array_of_strings := new array_of_strings();
begin
c.extend();
c(c.count) := 'A';
c.extend();
c(c.count) := 'B';

for rec in (select * from dual where 'A' member of c ) loop
  dbms_output.put_line('Option with memeber of ');
end loop;


for rec in (select * from dual where 'A' in (select * from table(c))) loop
  dbms_output.put_line('Option with table');
end loop;

end; 

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

答案 1 :(得分:0)

最终,我试图从表的条目中读取特定的数据,因为特定的表具有太多的数据,这会扰乱性能,从而使整个实体仅包含1个或2个变量是不正确的。 最终帮助我的是塔普尔。 使用JPAQuery,您可以选择要从搜索中带回的特定变量。 例如

    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对象并将值作为数组处理。