是否可以使用 JPA
查询 从对象中仅选择属性 A 和 B 而不使用条件查询?
要选择所有属性,我只需执行以下操作:
SELECT i FROM ObjectName i WHERE i.id = 10
但我在旧系统上有一个具有许多属性的对象,并且我想只选择几个属性,尽管我知道选择多个属性通常很快。
如果不使用条件查询,这可能吗?
最佳答案
是的,就像在普通 sql 中一样,您可以指定要选择的属性类型:
SELECT i.firstProperty, i.secondProperty FROM ObjectName i WHERE i.id=10
执行此查询将返回一个 Object[] 列表,其中每个数组包含一个对象的选定属性。
另一种方法是将选定的属性包装在自定义对象中并在 TypedQuery 中执行:
String query = "SELECT NEW CustomObject(i.firstProperty, i.secondProperty) FROM ObjectName i WHERE i.id=10";
TypedQuery<CustomObject> typedQuery = em.createQuery(query , CustomObject.class);
List<CustomObject> results = typedQuery.getResultList();
示例见 this文章。
2018 年 3 月 29 日更新:
@Krish:
@PatrickLeitermann for me its giving "Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Unable to locate class ***" exception . how to solve this ?
我猜你是在 Spring 应用程序的上下文中使用 JPA,不是吗?其他一些人正好有 the same problem他们的解决方案是在 SELECT NEW 关键字之后添加完全限定名称(例如 com.example.CustomObject)。
也许 Spring 数据框架的内部实现只能识别使用 @Entity 注释的类或通过其简单名称在特定 orm 文件中注册的类,这导致使用此解决方法。
关于java - JPA Query 仅选择特定列而不使用 Criteria Query?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24710626/