线程“main”中的异常 java.lang.IncompatibleClassChangeError:实现类
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23194894/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
提问by Nitesh
I am trying simple application for persisting object into the DB using JPA-(Hibernate Provider). I am very new to this JPA. I searched a lot on net but not getting solution of my problem. I don't know which Jars are required for this app. Plz resolve this problem. I have been trying this simple app for last 2 days. But it's not working. plz help me. Thank you very much in advance.
我正在尝试使用 JPA-(休眠提供程序)将对象持久化到数据库中的简单应用程序。我对这个 JPA 很陌生。我在网上搜索了很多,但没有得到我的问题的解决方案。我不知道这个应用程序需要哪些 Jars。lz解决这个问题。过去 2 天我一直在尝试这个简单的应用程序。但它不起作用。请帮助我。非常感谢您提前。
This is my code : Entity.java
这是我的代码:Entity.java
package com.jpa;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table (name="student")
public class EntityClass
{
@Id
private int id;
private String fName;
private String lName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getfName() {
return fName;
}
public void setfName(String fName) {
this.fName = fName;
}
public String getlName() {
return lName;
}
public void setlName(String lName) {
this.lName = lName;
}
}
this is my MainClass:
这是我的主类:
package com.jpa;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class MainClass {
公共类主类{
public static void main(String[] args)
{
EntityClass e= new EntityClass();
e.setfName("BNT");
e.setlName("SOFT");
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("persistence");
EntityManager eManager = emFactory.createEntityManager();
eManager.getTransaction().begin();
eManager.persist(e);
eManager.getTransaction().commit();
eManager.close();
}
}
and this is my persistence.xml file:
这是我的 persistence.xml 文件:
<persistence xmlns="http://java.sun.com/xml/ns/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">
<persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- <class>com.geowarin.hibernate.jpa.standalone.model.User</class> -->
<class>com.jpa.EntityClass</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/bnt" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="bnt123" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<!-- <property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.hbm2ddl.import_files" value="sql/import-users.sql" /> -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
</properties>
</persistence-unit>
Whenever I am trying to run MainClass.java it gives following errors:
每当我尝试运行 MainClass.java 时,它都会出现以下错误:
Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:107)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:124)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at com.jpa.MainClass.main(MainClass.java:29)
... I know something is wrong in adding required jars... I have added following jars:
...我知道添加所需的罐子有问题...我添加了以下罐子:
javax.persistence.jar
mysql-connector-java-5.1.24-bin.jar
hibernate-entitymanager.jar
hibernate.3.3.2.jar
hibernate-commons-annotations-4.0.1.Final.jar
jta-1.1.jar
antlr-2.7.6.jar
dom4j-1.6.1.jar
asm-3.1.jar
hibernate-core-3.5.1-Final.jar
hibernate-annotaions-3.5.1-Final.jar
cglib-2.2.2.jar
Is anything wrong in these Jars? Is it necessary to add more jars? Plz feel free to give any advice if I am doing wrong.
这些罐子有什么问题吗?是否需要添加更多的罐子?如果我做错了,请随时提供任何建议。
采纳答案by Patton
This error occurs when ever you have incompatible changes to the existing library of various versions of the same class exists in the classpath. Pls refer thisanswer for further details. Coming to your question, I see that you are using hibernate 3.5.x and also those jars with version 4.x and 3.3.x. Just for your reference this is the screenshot of my jars with respect to hibernate 4.x
当您对类路径中存在的同一类的各种版本的现有库进行不兼容的更改时,就会发生此错误。请参阅此答案以获取更多详细信息。谈到您的问题,我看到您正在使用 hibernate 3.5.x 以及那些版本为 4.x 和 3.3.x 的 jar。仅供参考,这是我的 jars 与 hibernate 4.x 相关的屏幕截图
antlr-2.7.7
dom4j-1.6.1
hibernate-commons-annotations-4.0.1.Final
hibernate-core-4.2.0.Final
hibernate-entitymanager-4.2.0.Final
hibernate-jpa-2.0-api-1.0.1.Final
hibernate-validator-4.3.1.Final
javassist-3.15.0-GA
jboss-logging-3.1.2.GA
jboss-logmanager-1.4.0.Final
jboss-transaction-api_1.1_spec-1.0.1.Final
log4j-jboss-logmanager-1.0.1.Final
For JPA to work I use the above jars. Also, please add the driver specific to your DB to the list. BTW, I always suggest you to use Some kind of dependency management tools like ivy, gradle or maven to manage your dependency rather you trying to manage it manually. This solves most of the problems.
为了让 JPA 工作,我使用了上面的 jars。此外,请将特定于您的数据库的驱动程序添加到列表中。顺便说一句,我总是建议您使用某种依赖管理工具,如 ivy、gradle 或 maven 来管理您的依赖,而不是您尝试手动管理它。这解决了大部分问题。