【问题标题】:Java + Oracle + EntityManagerJava + 甲骨文 + 实体管理器
【发布时间】:2015-08-28 09:10:50
【问题描述】:

我的问题是我对 EntityManager 有一个查询,例如:

Query query = em.createQuery("select nombre from OTP_OPERACION_DETALLE");

Java 抛出这个异常:

error e: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing the query [select nombre from OTP_OPERACION_DETALLE], line 0, column -1: unexpected end of query.
Internal Exception: MismatchedTokenException(-1!=80)

我尝试在 Oracle (PL/SQL) 中运行此查询,但没有任何问题。

问题出在哪里?

【问题讨论】:

  • 你可以试试em.createQuery("select nombre from OTP_OPERACION_DETALLE nombre"); 吗?
  • 我有一个错误:错误 e:在 EntityManager 中创建查询时发生异常:异常描述:编译查询时出错 [从 OTP_OPERACION_DETALLE 名称中选择名称]。未知实体类型 [OTP_OPERACION_DETALLE]。
  • 这是因为您可能没有添加@Entity 并且没有在您的persistence.xml 中提及该类。将@Table 注释添加到您的@Entity 并将实体添加到persistence.xml。如果它不是一个实体,只需使用em.createNativeQuery("select nombre from OTP_OPERACION_DETALLE nombre");
  • 谢谢!!!我用了 creativeNativeQuery,一切都是正确的!!!

标签: java oracle entitymanager


【解决方案1】:

您拥有(或更确切地说没有)是一个 JPQL 查询,它不会在 Oracle 中运行,因为只有 JPA 实现者才能将其转换为 SQL。相反,在 Oracle 中运行的不能使用createQuery 运行,它需要createNativeQuery

正确的 JPQL 查询类似于 select a.nombre from MyEntity a 其中MyEntity 是映射到OTP_OPERACION_DETALLE 表的实体类(它有一个nombre 字段)。

【讨论】:

    【解决方案2】:

    首先,您在 OTP_OPERACION_DETALLE 之后缺少 nombre,它是表的别名。正如我在comments 中已经提到的,您需要检查查询中使用的类是否为实体,并且您在@Entity 中使用了@Table 注释。在您的情况下,OTP_OPERACION_DETALLE 不是实体,因此您需要使用 em.createNativeQuery

    Query query = em.createNativeQuery("select a.nombre from OTP_OPERACION_DETALLE a");
    

    大致相当于这个查询select nombre from OTP_OPERACION_DETALLE

    【讨论】:

      【解决方案3】:

      试试这场战争

      Query q=getEntityManager().createQuery("select nombre from OTP_OPERACION_DETALLE");
      List roles=q.getResultList();
      if (roles.isEmpty()) {
          return null;
      }
      else {
          //Fetch the Record
      }
      

      【讨论】:

      • 我没有这个功能!!
      • getEntityManager() 是工厂方法,getResult() 将帮助执行查询。你说的是哪个功能??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      相关资源
      最近更新 更多