0

这是我在这个问题上苦苦挣扎的第二天。我们有一个使用 spring 和 hibernate 的网络应用程序。现在我们正在尝试向命令行公开一些功能。所以我们应该能够从命令行运行一个类(没有 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我可以设置数据源(它有数据源属性)

持久性.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在没有 Web 容器的情况下使用吗?Spec对此没有说什么。
  • 如果我不能使用LocalContainerEntityManagerFactoryBean,那么我该如何设置 LocalEntityManagerFactoryBean 所以它应该使用我的数据源而不是来自persistance.xml(我不能在persistance.xml 中定义任何东西)。

我正在使用带有休眠 4.1.8.Final 的 spring 版本 3.1.3,并且我在命令行中(我没有 jee 环境)

对多个问题感到抱歉,但我认为所有问题都源于同一个根源。

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

4

1 回答 1

0

尝试 3 天后,我解决了这个问题。jars 搞砸了 :) 这是因为我的类路径中有 jee-api.jar 并且我从命令行运行代码,我没有 web env。所以我的环境中没有任何 jee-api.jar 的实现。这就是它给出上述例外的原因。我删除了 jee-api.jar 并消失了。

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

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

这是我对某人的帮助。

于 2012-12-15T17:07:16.813 回答