【问题标题】:JPA constructor class [Emp] not found - oracle.toplink.essentials.exceptions.EJBQLException未找到 JPA 构造函数类 [Emp] - oracle.toplink.essentials.exceptions.EJBQLException
【发布时间】:2015-02-13 13:01:16
【问题描述】:

这是question的延续

我已将查询命名为

select new Emp(o.empNo, o.empName)  from Emp o

和构造函数定义为

public Emp(String empNo, String empName) {
    this.empNo= empNo;
    this.empName= empName;
}

执行时出现错误

Exception [TOPLINK-8013] (Oracle TopLink Essentials - 2.1 
(Build b52-fcs (09/24/2008))):
oracle.toplink.essentials.exceptions.EJBQLException
Exception Description: Error compiling the query [Emp.findAll:
select new Emp(o.empNo, o.empName)  from Emp o ], line 1, column 9: 
constructor class [Emp] not found.

【问题讨论】:

    标签: java jpa toplink toplink-essentials


    【解决方案1】:

    http://openjpa.apache.org/builds/1.2.0/apache-openjpa-1.2.0/docs/manual/jpa_langref.html#jpa_langref_constructor

    可以在 SELECT 列表中使用构造函数来返回一个或多个 Java 实例。指定的类不需要是实体或映射到数据库。 构造函数名称必须是完全限定的。

    SELECT NEW com.company.PublisherInfo(pub.id, pub.revenue, mag.price)
    

    【讨论】:

      【解决方案2】:

      我已经设法解决了这个错误,可能对其他人有用。

      在namedQuery中而不是

      select new Emp(o.empNo, o.empName)  from Emp o
      

      提供完全限定的类名,即<packagename>.<classname>

      select new test.entity.Emp(o.empNo, o.empName) from Emp o
      

      谢谢。

      Courtesy

      【讨论】:

      • 我们同时发布了同样的内容 :)
      • @AdrianB。是的,但我会给你。
      猜你喜欢
      • 2014-10-24
      • 1970-01-01
      • 2016-11-24
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多