【问题标题】:Hibernate "PreInsertEvent.getSource()" NoSuchMethodError休眠“PreInsertEvent.getSource()”NoSuchMethodError
【发布时间】:2010-10-27 07:25:32
【问题描述】:

我在尝试插入时收到以下错误:

java.lang.NoSuchMethodError : org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/event/EventSource;

我见过other 的人由于休眠罐子不兼容而遇到同样的问题,但我相信我做对了(根据compatibility matrix

这是我的 pom.xml 中的相关部分:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.4.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.3.0.ga</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>3.1.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.4.0.GA</version>
    </dependency>

谁能给点建议?

问候

马蒂

【问题讨论】:

    标签: java hibernate maven-2


    【解决方案1】:

    我找到了一个解决方案,但我不确定它是否正确——任何有更好的人,请指教:

    添加了对 cglib 的引用,并明确排除了 hibernate(包括 3.2)

     <dependencies>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>3.4.0.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>3.3.0.ga</version>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.3.1.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>3.1.0.GA</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>3.4.0.GA</version>
        </dependency>
    
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
    </dependencies>
    

    【讨论】:

    • 我没有使用 Maven,但是我手动添加了所有最新的依赖项并且它起作用了。
    【解决方案2】:

    这是一个已知错误:https://hibernate.onjira.com/browse/HVAL-81。当您引用比核心版本更旧的休眠验证器时,就会发生这种情况。

    【讨论】:

    • 这只是一个副本,请查看原始错误HVAL-75 以获取更多信息/状态。
    【解决方案3】:

    发生此错误时对我的实际问题是

    1. Hibernate-core 依赖项不在我的 EAR 包装中。

    2. 默认情况下,它会选择 jboss.4.2.3/.../lib 的 hibernate3.jar。

    3. 只需将 hibernate-core-3.3.1.GA 添加到我在 EAR 中的依赖项列表中 包装。

    4. 已经在 jboss-app.xml 中设置了加载程序的覆盖。

    5. 从 hibernate-entitymanager-3.4.0.GA 中排除了 hibernate-core (不要认为这是必需的,因为提供的核心将是 3.3.0.SP1 并且无论如何都会被省略)。

    它可以排除一些已经存在的 xml-apis、ejb3-persistence 等来自 hibernate-core 的依赖项。

    最终核心依赖看起来像这样。

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.3.1.GA</version>
              <exclusions>
                <exclusion>
                    <artifactId>ejb3-persistence</artifactId>
                    <groupId>org.hibernate</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jta</artifactId>
                    <groupId>javax.transaction</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>persistence-api</artifactId>
                    <groupId>javax.persistence</groupId>
                </exclusion>
                <exclusion>
                    <groupId>xml-apis</groupId>
                    <artifactId>xml-apis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    注意:我不认为 cglib 是必需的,因为它与此上下文无关。

    希望这对某人有用。

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2016-11-21
      • 1970-01-01
      • 2019-04-07
      • 2011-12-16
      • 2013-01-26
      相关资源
      最近更新 更多