簡體   English   中英

JPA java.lang.ClassFormatError問題

[英]JPA java.lang.ClassFormatError issue

我在啟動JPA和Derby項目時遇到問題。 我有以下錯誤:

Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/Persistence

我的Main.java是:

public class Main {
    private static final String PERSISTENCE_UNIT_NAME = "customers";
    private static EntityManagerFactory factory;
public static void main(String[] args) {
    factory = Persistence.createEntityManagerFactory("todos");

    EntityManager em = factory.createEntityManager();

    Query q = em.createQuery("select t from CUSTOMER t");
    List<Customer> customerList = q.getResultList();
    for (Customer customer : customerList) {
        System.out.println(customer);
    }
    System.out.println("Size: " + customerList.size());

    em.getTransaction().begin();
    Customer customer = new Customer();
    customer.setCity("Warsaw");
    customer.setCountry("USA");
    customer.setName("John");
    customer.setStreet("Street");
    em.persist(customer);
    em.getTransaction().commit();

    em.close();
}
}

我的persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="todos" transaction-type="RESOURCE_LOCAL">
        <class>b.model.Product</class>
        <class>b.model.Book</class>
        <class>b.model.Movie</class>
        <class>b.model.Customer</class>
        <class>b.model.Order</class>
        <class>b.model.OrderElement</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
            <property name="javax.persistence.jdbc.url"
                      value="jdbc:derby://localhost:1527/baza;create=true" />


        </properties>

    </persistence-unit>
</persistence>

我的項目中有2個依賴項:

  1. derbyclient-10.12.1.1.jar
  2. javaee-api-6.0.jar

關於我在做什么錯的任何想法嗎?

我有如下定義的所有Model類(例如Customer):

@Data
@Entity(name = "CUSTOMER")
public class Customer {

    @Id
    @Column(name = "CUSTOMER_ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long customerId;

    @Column(name = "NAME")
    private String name;

    @Column(name = "SURNAME")
    private String surname;

    @Column(name = "STREET")
    private String street;

    @Column(name = "CITY")
    private String city;

    @Column(name = "ZIP_CODE")
    private String zipCode;

    @Column(name = "COUNTRY")
    private String country;

    @OneToMany(mappedBy="customer",targetEntity=Order.class, fetch= FetchType.EAGER)
    private Collection orders;

}

這很可能是由於在WAR中包裝了javaee-api jar引起的。 它僅包含方法簽名,但不包含方法主體,因此無法使用它來運行/測試/部署應用程序。 它的唯一目的是針對它編譯您的應用程序,從而確保您遵循javaee api規范並避免依賴於具體的實現。 另外,不得在WAR中打包服務器提供的任何API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM