【问题标题】:Java EE / jpa /jpqlJava EE / jpa /jpql
【发布时间】:2013-03-30 13:11:38
【问题描述】:

我正在努力提高我在 Java EE 方面的技能

我尝试使用我发现的这个查询Here

SELECT COUNT(e) FROM Object e WHERE TYPE(e) <> Country 

我就是这样用的

TypedQuery<String> query=(TypedQuery<String>) manager.createQuery
( "SELECT COUNT(e) FROM Object e WHERE TYPE(e) <> Country");
List list=query.getResultList();
for(Object entity : list)
System.out.println(entity);

但我收到此错误

Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: FROM near line 1, column 17 [SELECT COUNT(e) FROM Object e WHERE TYPE(e) <> Country]
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1374)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1315)
at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:280)

有人知道如何改正吗?

【问题讨论】:

    标签: jakarta-ee jpa jpql


    【解决方案1】:

    您的 typedQuery 的语法不正确。您不应该在 TypedQuery 中强制转换查询。

    使用

      TypedQuery<FooBar> query = em.createQuery(MyQuery, FooBar.class);
    

    改为

    http://www.objectdb.com/java/jpa/query/api

    【讨论】:

    • 谢谢我不认为这是错误的根源,因为它适用于这个查询“SELECT COUNT(e) FROM Country e”我认为错误是由“Object”子句引起的跨度>
    • 是的,因为 jpa 不明白 Object 在这里做什么,因为它不是一个声明的实体。但是,如果这种类型的查询是可能的,我想它可能会修复。请告诉我您的调查结果
    • 你好,你是对的 jpa 不理解 Object 类型,起初我以为这个查询会返回我在我的数据库中拥有的 antities 的数量(这是错误的),它有效当我像这样修改查询时:“SELECT COUNT(u) FROM User u WHERE TYPE(u) Client”。并返回我在我的数据库中拥有的管理员数量 Client 和 Administrators 是从实体 User 继承的两种类型谢谢您与主题的互动
    • 如果不计算数据库中的实体,这个查询会做什么? TypedQuery q = em.createQuery("SELECT COUNT(e) FROM Object e", Object) 工作吗?还是应该使用 TypedQuery q = em.createQuery("SELECT COUNT(e) FROM Object e", Foo) 来计算数据库中的所有 Foo 记录?如果是这样,我想您必须使用实体超类型来计算使用这种查询的所有实体记录。反正我学到了一些东西。如果它解决了您的问题,请接受答案。
    • 我试试这两个查询 TypedQuery q = em.createQuery("SELECT COUNT(e) FROM Object e", Object), TypedQuery q = em.createQuery("SELECT COUNT (e) 来自对象 e", Foo)。但两者都没有工作。我只想知道 Type 子句是如何工作的?我知道它可以使用:例如在这种情况下,如果您有一个映射到实体(用户)的表用户,并且您有两种类型的用户客户端和管理员(客户端和管理员两个实体从用户继承)所以如果你想让两个知道你的数据库中有多少客户端,你可以使用子句 Type
    猜你喜欢
    • 2013-03-16
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2015-04-21
    • 2020-11-26
    • 2014-12-02
    相关资源
    最近更新 更多