当前位置: 首页 > 知识库问答 >
问题:

JPA查询只选择特定列而不使用条件查询?

丌官招
2023-03-14
SELECT i FROM ObjectName i WHERE i.id = 10

但是我在遗留系统上有一个具有许多属性的对象,我只想选择几个,尽管我知道选择几个属性通常是很快的。

如果不使用条件查询,这可能吗?

共有1个答案

佟阳飙
2023-03-14

是的,就像在普通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();

@PatrickLeitermann对我来说,它给出了“由:org.hibernate.hql.internal.ast.querySyntaxException引起:无法定位类***”异常。这怎么解决?

我想您是在Spring应用程序的上下文中使用JPA,不是吗?其他一些人也有同样的问题,他们的解决方案是在SELECT NEW关键字后面添加完全限定名(例如。com.example.customObject)。

也许Spring data framework的内部实现只识别用@Entity注释的类或通过简单名称注册在特定orm文件中的类,这就导致了使用这种变通方法。

 类似资料:
  • 我正在使用Spring数据jpa来创建服务。使用我从多个表中提取记录。我在模型类中使用了映射。模型类与和进行映射。相符。 我只想从建筑中选择建筑名称。 谁能告诉我怎么办? 查询DSL 结果

  • 我试图使用JPA标准编写以下查询,但我无法选择子查询中的多列。 我陷入了下面的实现过程中,无法找到如何在子查询中选择多个列。请看我在代码中的评论(第三行)。 请帮我解决这个问题。

  • 这是一个示例实体: 现在我创建一个条件查询,将Join作为follwing: 上面的代码可以在PosgreSQL中工作,但不能在Oracle中运行,因为它选择的acctype.name没有出现在group by子句中。 更新: 我想我的问题对你来说不清楚。我的问题不是关于中的PostgreSQL或Oracle行为。我的问题是: 我在子句中使用(这意味着我希望hibernate在中使用Account

  • JPA Criteria似乎坚持认为min()(和max())只适用于数字字段。然而,情况并非如此,因为SQL数据库确实可以从字符串列中选择min()和max()值。我还可以使用JQL选择字符串列的min()或max()值。 但是,当使用条件查询时,编译器会在 min() 与字符串列一起使用时进行报错:绑定不匹配:条件生成器类型的泛型方法 min(表达式)不适用于参数(子查询.get(“strin

  • 我试图使用jpa组件来选择从标题中获取的id。我在文档中找到了一个使用本机select查询的示例: 我试图用${header.id}替换“1”常量: 这似乎不管用,我明白了: 也许还有别的方法可以让它发挥作用?

  • 问题内容: 我只想选择特定的列(例如)。我有一个通用的DAO,我想到的是: 错误是: 。我应该如何改变呢?我想获取一个类型对象,该对象仅具有和字段,而其他所有对象都是。 类型扩展有两个字段。 是。 问题答案: 仅获取特定列的JPA方法之一是请求一个Tuple对象。 在您的情况下,您需要编写如下内容: 如果您有一个代表结果的类(例如您的情况),则可以采用另一种方法。不必是Entity类。如果具有类似