java - JPA Query 仅选择特定列而不使用 Criteria Query?

标签 java jpa jpa-2.0 jpa-2.1 criteriaquery

是否可以使用 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/

相关文章:

java - P2P文件共享应用

java - 为什么要使用嵌套类?

java - JPA,playframework,在分组依据之前选择顺序

java - 在 JPA 2.0 中从没有外键的多个表中获取数据

java - while 循环帮助

java - 在 Eclipse 中导入项目时没有包层次结构

java - "must implement the inherited abstract method"

java - JPA 惰性属性获取自定义属性

java - JPA2中使用字符串建表(类似JDBC)

java - JPA2 唯一约束 : do I really need to flush?