【问题标题】:NetBeans Platform: Entity class errorNetBeans 平台:实体类错误
【发布时间】:2012-06-02 20:45:33
【问题描述】:

到目前为止,我已经有了一个功能齐全的 NetBeans 平台应用程序,它只有一个屏幕,通过以下代码利用了 Shipvia 实体类:

import entity.Shipvia;
import entity.Route;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;

public class RetrieveResultList {

    public static List RetrieveResultList (String tablename){
        EntityManager entityManager = Persistence.createEntityManagerFactory("EntityLibraryPU").createEntityManager();
        System.out.println("NAMED QUERY:>"+tablename+".findAll");
        Query query = entityManager.createNamedQuery(tablename+".findAll");
        List<Shipvia> resultList = query.getResultList();
        return resultList;
    }
}

如您所见,我根据传递的表名创建了一个动态查询。因此,如果用户打开一个 ShipviaTopComponent,它将调用 Shipvia.findAll(参见下面的实体类的一部分)。

package entity;

import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "SHIPVIA")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Shipvia.findAll", query = "SELECT c FROM Shipvia c")
});

我的目标是拥有第二个屏幕,名为 RouteTopComponent 使用 Route 实体类

package entity;

import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "ROUTE")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Route.findAll", query = "SELECT c FROM Route c")
});

但是,当我尝试打开路线屏幕时,出现以下错误:

SEVERE [global]
java.lang.IllegalArgumentException: NamedQuery of name: Route.findAll not found.
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getDatabaseQueryInternal(EJBQueryImpl.java:577)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1043)
    at com.demo.viewer.RetrieveResultList.RetrieveResultList(RetrieveResultList.java:23)
    at com.demo.viewer.RoutesTopComponent.<clinit>(RoutesTopComponent.java:40)
Caused: java.lang.ExceptionInInitializerError
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

RouteTopComponent 的第 40 行是:

List<Route> resultList = RetrieveResultList.RetrieveResultList("Route");

我很困惑为什么打开 ShipviaTopComponent 并找到 Shipvia.findAll,但没有找到 RouteTopComponent/Route.findAll?

【问题讨论】:

  • 注意:我建议遵循 Java 代码约定,方法名以小写字母开头。
  • 你能展示你的persistence.xml吗?
  • @Puce 先生,您真是个天才!随意将其作为答案发布,因为您是 100% 正确的!我已经从我的 Persistence.xml 中省略了 Route.class !另外,我感谢小写字母约定提醒!已经有一段时间了,出于某种原因,我认为这是大写字母的方法名称。

标签: java jpa entity netbeans-platform


【解决方案1】:

如 cmets 中所述,如果您在 Java SE 环境中使用 RESOURCE_LOCAL 事务类型/运行 JPA,则必须在 persistence.xml 文件中明确列出实体类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多