Spring Entitymanager java.lang.ClassFormatError

时间:2012-12-13 20:35:50

标签: spring hibernate datasource entitymanager

这是我正在努力解决这个问题的第二天。 我们有一个使用spring和hibernate的web应用程序。现在我们试图向命令行公开一些功能。所以我们应该能够从命令行运行一个类(没有web应用程序),因此它应该可以访问spring和hibernate。     

<context:annotation-config/>

<context:component-scan base-package="com.x.y.z"/>

<jpa:repositories base-package="com.x.y" />


<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="jpaProperties">
        <props>
            <prop key="javax.persistence.validation.mode">NONE</prop>
            <prop key="hibernate.validator.apply_to_ddl">false</prop>
            <prop key="hibernate.validator.autoregister_listeners">false</prop>
            <prop key="hibernate.format_sql">false</prop>
        </props>
    </property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false" />
            <property name="database" value="SQL_SERVER" />
            <property name="showSql" value="false" />
        </bean>
    </property>
</bean>

这里我使用的是LocalEntityManagerFactoryBean,但似乎没有办法为它设置数据源。它来自persistance.xml

如果我使用LocalContainerEntityManagerFactoryBean我可以设置数据源(它有数据源属性)

persistance.xml:

<persistence version="1.0" 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_1_0.xsd">
<persistence-unit name="oms-jpa">
    <class>com.domain.User</class>
</persistence-unit>

在persistance.xml中,我没有为数据源定义任何数据库信息,因此LocalEntityManagerFactoryBean不适用于此。

我得到了什么:

Error creating bean with name 'entityManagerFactory' defined in file [C:\Users\ekamoliddinov\IdeaProjects\web\conf\spring-config.xml]: Invocation of init method failed; nested exception is java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/validation/Validation
然后有些人说:

  • Jar版本搞砸了
  • jee-api.jar缺失

但我有jee-api.jar。

我的问题:

  • 导致上述异常的原因是什么?
  • 我可以在没有网络的情况下使用LocalContainerEntityManagerFactoryBean吗? 容器?规格没有说明这一点。
  • 如果我无法使用LocalContainerEntityManagerFactoryBean,我该如何设置 LocalEntityManagerFactoryBean所以它应该使用我的数据源而不是 persistance.xml(我无法在persistance.xml中定义任何内容)。

我使用的是带有hibernate 4.1.8.Final的Spring 3.1.3版本,我在命令行中(我没有jee环境)

对于不止一个问题感到抱歉,但所有问题都来自我认为的同一根。

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

尝试3天后,我解决了这个问题。混乱的罐子:) 这是因为我在我的类路径中有jee-api.jar而且我从命令行运行代码,我没有web环境。所以在我的环境中没有任何关于jee-api.jar的内容。这就是它给出上述例外的原因。我删除了jee-api.jar并且消失了。

我可以告诉另一件事:我们可以从命令行使用LocalContainerEntityManagerFactoryBean。我正在使用它。

最后一件事:我们无法将数据源设置为LocalEntityManagerFactoryBean

这是我对某人的帮助。