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

来自Jpa代码的Jar文件不起作用

慕嘉茂
2023-03-14

我开发了一个简单的代码,通过在实体类“employee”和“Department”上使用JPA的CRUD操作(find)来显示员工姓名。在运行代码时,它工作正常,但真正的问题来了,当我从应用程序创建一个jar文件时,jar文件出现了一个异常,我将该异常写在一个txt文件中

下面是Employee类

    package com.tutorialspoint.eclipselink.entity;

    import java.util.*;
    import javax.persistence.*;

    @Entity
    public class Employee {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)  
    private int eid;

    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date dop;

    private String ename;
    private double salary;
    private String deg;

    @OneToOne(targetEntity = Department.class)
    private Department dept;

    @OneToMany (targetEntity = Staff.class)
    private ArrayList<Staff> staffs;

    public Employee(int eid, String ename, double salary, String deg) {
       super( );
       this.eid = eid;
       this.ename = ename;
       this.salary = salary;
       this.deg = deg;
    }

    public Employee( ) {
         super();
    }

    public Date getDop() {
         return dop;
    }

    public void setDop(Date dop) {
         this.dop = dop;
    }

    public int getEid( ) {
        return eid;
    }

    public void setEid(int eid) {
        this.eid = eid;
    }

    public Department getDept() {
        return dept;
    }

    public void setDept(Department dept) {
        this.dept = dept;
    } 

    public String getEname( ) {
        return ename;
    }

    public void setEname(String ename) {
       this.ename = ename;
    }

    public double getSalary( ) {
       return salary;
    }

    public void setSalary(double salary) {
       this.salary = salary;
    }

    public String getDeg( ) {
         return deg;
    }

    public void setDeg(String deg) {
        this.deg = deg;
    }

    public ArrayList<Staff> getStaffs() {
        return staffs;
    }

    public void setStaffs(ArrayList<Staff> staffs) {
        this.staffs = staffs;
    }
    }

下面是显示员工姓名和学位的类

    public void findEmployee(){
    try{
        EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
        EntityManager entitymanager = emfactory.createEntityManager();
        Employee employee = entitymanager.find( Employee.class, 204 ); 
        JOptionPane.showMessageDialog(null, employee.getEname()+ 
        "=>"+employee.getDeg());

        }catch(Exception ex){
              JOptionPane.showMessageDialog(null,ex.getMessage());
              displayMsg(ex.getMessage());
         }
        }
    public void displayMsg(String msg){
    // i made this method to display the exception in a txt file
        File f = new File("E:\\bug2.txt");
        FileWriter fw = new FileWriter(f);
        PrintWriter pw = new PrintWriter(fw);
        pw.println(msg);
        pw.flush();pw.close();

    }

下面是异常“exception[EclipseLink-28019](Eclipse Persistence Services-2.5.2.v20140319-9AD6ABD):org.Eclipse.Persistence.exceptions.EntityManagerSetupException异常描述:PersistenceUnit[Eclipselink_JPA]的部署失败。关闭此PersistenceUnit的所有工厂。内部异常:exception[EclipseLink-0](Eclipse Persistence Services

Exception[EclipseLink-1](Eclipse Persistence Services-2.5.2.v20140319-9AD6ABD):org.Eclipse.Persistence.exceptions.DescriptoreXception

异常说明:属性[teacherSet]未声明为ValueHolderInterface类型,但其映射使用间接方式。

映射:org.eclipse.persistence.mappings.manyTomanyMapping[teacherSet]描述符:RelationalDescriptor(com.tutorialspoint.eclipselink.entity.CLAS-->[databaseTable(CLAS)])

Exception[EclipseLink-1](Eclipse Persistence Services-2.5.2.v20140319-9AD6ABD):org.Eclipse.Persistence.exceptions.DescriptoreXception

异常说明:属性[staffs]未声明为ValueHolderInterface类型,但它的映射使用间接方式。映射:org.eclipse.persistence.mappings.manytomanymapping[staffs]

描述符:RelationalDescriptor(com.tutorialspoint.eclipselink.entity.employee-->[databasetable(EMPLOYEE)])

共有1个答案

贺玉石
2023-03-14

涉及像ValueHolders和间接这样的接口的异常很可能是由于实体编织造成的问题。

实体编织是一个修改已编译实体的字节码的过程,以便它们实现更多的接口,并添加新的方法,以便它们能够处理间接和延迟加载等特性。

您的IDE是Oracle JDeveloper吗?默认情况下,它是具有自动执行此操作的运行配置的IDE之一,以便您的实体能够正确工作。这可以在其他IDE中以类似的方式进行配置--通过添加-javaagent: 作为程序参数(或在某些IDE中的Java选项)。查看这篇博客文章以获得一些快速信息。

在您的部署中,可能会出现Eclipselink的动态(运行时)编织失败(或由于某种原因不完整)的情况。也许您应该在将实体打包到部署工件之前考虑静态编织。

有关此操作的更多信息:https://wiki.eclipse.org/eclipselink/userguide/jpa/advanced_jpa_development/performance/weaving/static_wiving

 类似资料:
  • 请快速帮助我从jnlp文件下载jar文件,在缓存中下载的文件是随机命名的,而不是按照jnlp文件名,即它有像345546ACB-1DA47A98-1_2_3_4这样的名称,而不是jarone.jar,请使用正确的URL我需要用于下载下面代码的jar或如何获得在缓存文件夹中下载的jar文件的正确名称。我可以在java控制台中看到所有正确的jar名称,但不能从那里下载

  • 问题内容: 什么样的配置是需要使用注解来自像,等等?这是我的代码: 当我尝试在另一个类中使用它时,验证不起作用(即,创建该对象时没有错误): 为什么这不适用和的约束?我还需要做什么? 问题答案: 为了使JSR-303 bean验证在Spring中起作用,您需要做一些事情: 注释的MVC名称空间配置: JSR-303规范JAR :(看起来您已经拥有了) 规范的实现,例如休眠验证,它似乎是最常用的示例

  • 我有一个我写的程序的输出文件。它由FileWriter和BufferedWriter编写。 我是否错误地使用了FileWriter/BufferedWriter,或者它在.jar文件中不起作用?

  • 问题内容: 我正在用Java开发游戏,我想将随机生成的地图保存在图像上,然后加载它。我的代码在Eclipse中工作正常,但是当我将其导出到.jar / .exe文件时,它在制作文件(“ mapf”)时会遇到问题。谢谢您的回答。 堆栈跟踪: 问题答案: 您似乎认为您可以将jar视为目录结构,事实并非如此。您甚至都不应该 考虑 将代码从中运行到jar文件中(可能的话,但是会涉及 很多 陷阱)。 假设您

  • 问题内容: 我创建了一个JPA项目,尝试使用上述类,但是找不到它们缺少的jar。请指导我。 问题答案: 尝试Geronimo规格JPA2 jar http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/geronimo/specs/geronimo- jpa_2.0_spec/1.0-PFD2/ 仍然没有官方的JPA2.jar

  • 问题内容: 谁能推荐Java库来操作 jar 文件?我在 java.util.jar上 找到的工具比较简洁(或者也许我没有看一些示例代码)。我对诸如此类的东西感兴趣: 将文件添加到 罐子中 从 罐子中* 删除文件 * 从文件夹创建一个 jar 文件 将 jar 文件放到文件夹中 读取 jar条目 的内容(也许在内存中,而不必缩小磁盘上的 jar ) 在内存中创建 jar条目 ,而不必从磁盘上的文件