Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的不兼容ClassChangeError异常是什么?_Java_Hibernate_Hibernate Annotations - Fatal编程技术网

Java中的不兼容ClassChangeError异常是什么?

Java中的不兼容ClassChangeError异常是什么?,java,hibernate,hibernate-annotations,Java,Hibernate,Hibernate Annotations,我正在开发一个小应用程序,并尝试使用Hibernate注释来映射实体。当我遇到这个异常时,我想测试一下是否一切正常: Exception in thread "main" java.lang.ExceptionInInitializerError at fr.cc2i.intervention.dao.main.Main$HibernateUtil.<clinit>(Main.java:48) at fr.cc2i.intervention.dao.main.Main.t

我正在开发一个小应用程序,并尝试使用Hibernate注释来映射实体。当我遇到这个异常时,我想测试一下是否一切正常:

    Exception in thread "main" java.lang.ExceptionInInitializerError
 at fr.cc2i.intervention.dao.main.Main$HibernateUtil.<clinit>(Main.java:48)
 at fr.cc2i.intervention.dao.main.Main.test(Main.java:21)
 at fr.cc2i.intervention.dao.main.Main.main(Main.java:32)
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
 at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
 at fr.cc2i.intervention.dao.main.Main$HibernateUtil.<clinit>(Main.java:44)
 ... 2 more
我的hibernate配置非常简单:

    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <!-- Database connection settings -->
  <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
  <property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
  <property name="connection.username">sa</property>
  <property name="connection.password"></property>

  <!-- JDBC connection pool (use the built-in) -->
  <property name="connection.pool_size">1</property>

  <!-- SQL dialect -->
  <property name="dialect">org.hibernate.dialect.HSQLDialect</property>

  <!-- Enable Hibernate's automatic session context management -->
  <property name="current_session_context_class">thread</property>

  <!-- Disable the second-level cache  -->
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

  <!-- Echo all executed SQL to stdout -->
  <property name="show_sql">true</property>

  <!-- Drop and re-create the database schema on startup -->
  <property name="hbm2ddl.auto">update</property>

  <mapping package="fr.cc2i.intervention.dao.beans.Client" />
  <mapping class="fr.cc2i.intervention.dao.beans.Contrat" />
  <mapping class="fr.cc2i.intervention.dao.beans.Intervention" />
  <mapping class="fr.cc2i.intervention.dao.beans.Technicien" />



 </session-factory>
</hibernate-configuration>

org.hsqldb.jdbcDriver
jdbc:hsqldb:hsql://localhost
sa
1.
org.hibernate.dialogue.hsql方言
线
org.hibernate.cache.NoCacheProvider
真的
更新
下面是我使用的hibernate maven依赖项:

<properties>
        <org.springframework.version>3.0.3.RELEASE</org.springframework.version>
        <hibernate.version>3.6.0.Beta1</hibernate.version></properties>

    <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

3.0.3.1发布
3.6.0.1
org.hibernate
休眠实体管理器
${hibernate.version}
罐子
编译

有人能帮我吗???

您使用的是哪台应用服务器?可能是重复的或冲突的hibernate jar。

这意味着在某个时候,
接口
被更改为
,但原始接口的实现者没有被修改和重新编译以适应这种(不兼容的)更改

例如,考虑以下类型:

interface Fooable {
  void foo();
}

class FooImpl implements Fooable {
  public void foo() {
     /* Do something... */
  }
}
现在假设修改并重新编译了
Fooable
,但
FooImpl
不是:


对,埃里克森正确地识别了问题

这可能是由于类路径中具有相同类型定义的两个冲突版本造成的。例如,library-version2.jar定义了一些东西,但在类路径中也有library-version5.jar


在运行时,这会导致erickson描述的痛苦和痛苦。

仔细检查您的所有库是否兼容。对hibernate的稳定版本也可以这样做,可能是因为beta版有缺陷,或者hibernate 3.6.0 beta POM有一些不兼容的依赖项

尝试在没有maven和hibernate 3.6.0 beta1库的情况下从官方服务器构建它



好的-您的问题不是bug,而是新功能。Hibernate 3.6.0 Beta2的发行说明对以前的beta版进行了重大更改:。因此,如果您想保留3.6.0版本,您应该(a)更新到最新的测试版(Beta3),并且(b)不要继续使用AnnotationConfiguration。

JDK 1.4支持已在3.6中放弃。因此,Hibernate注释已合并回Core,不再需要同时具有
配置
注释配置
,后者不应在3.6.x中使用(实际上,您可能应该使用JPA
EntityManager
,而不是Core API,但这是另一种情况)


但我真正的建议是使用Hibernate的3.5.x分支,而不是3.6.x。正如我们已经看到的,Hibernate团队在3.6中引入了巨大的变化,这是在测试版的基础上,除非您密切关注这些变化,否则您将面临一些惊喜,并且在internet上还找不到很多资源。只需使用Hibernate 3.5(撰写本文时为3.5.5-Final)。

我写这篇文章是为了帮助查找此错误的人。有时,来自SpringRoo的jar文件生成pom.xml和Tomcat服务器运行时库冲突,并在单元测试期间产生此错误。在构建Flex等前端技术时,服务器运行时库不必出现在类路径中,因此只需从类路径中删除服务器运行时库。

等等,这只是一个可能的原因。例如,将字段从静态更改为非静态,反之亦然@Andreas_D-不带“实现类”的消息。这是我描述的问题所特有的。@Dimitri-修复它取决于所涉及的类。最可能的情况是,您有一些特定于您的应用程序的代码,这些代码是针对第三方库编译的,然后在不重新编译代码的情况下替换了该第三方库。确保您正在部署您实际编译的JAR文件,并且类路径上每个类只有一个版本。但我想,我发现了问题所在。看看我的答案。很确定,这是他与AnnotationConfiguration结合使用的hibernate版本。@erickson是列出的第一个类(读取堆栈跟踪),它不是java.*或sun.*始终是错误消息中称为“实现类”的有问题类?感谢您的评论。在最近从WebSphere迁移到JBoss的一个遗留项目中,由于使用了interface
org.primitive.type.PrimitiveType
(在自定义Hibernate
UserType
中),我遇到了这个
不兼容的ClassChangeError
,它是3.6版之前的一个抽象类。但问题是大量pom.xml具有不同的Hibernate依赖项,如3.3.2.GA与3.6.10.Final。
interface Fooable {
  void foo();
}

class FooImpl implements Fooable {
  public void foo() {
     /* Do something... */
  }
}
abstract class Fooable {
  public abstract void foo();
}