0

我已经阅读了许多使用 JPA 配置 spring 的教程。我正在使用本地 MySQL 数据库,我有这个上下文:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- DataSource Setup -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="vitornobrega" />
        <property name="password" value="" />
    </bean>

    <!-- Entity Manager Factory -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.vitornobrega.myapp.entities" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
            </bean>
        </property>
    </bean>

    <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    <tx:annotation-driven transaction-manager="txManager" />
</beans>

我在 JUnit 上进行了测试以测试我的 DAO 并且效果很好,但是当我尝试使用此配置持久化实体时,我从未在休眠日志中记录插入命令,但在测试用例中我看到了它。如果我尝试创建 entitymanager.flush,则会出现异常,因为任何事务都在运行。

我应该改变什么可以使这个实体在我的本地数据库上持久化?谢谢

4

3 回答 3

1

如果我尝试创建 entitymanager.flush,则会出现异常,因为任何事务都在运行。

如果我没看错,问题是你试图在不开始交易的情况下保存一些东西。更改持久状态时需要事务。

于 2013-02-28T02:29:12.950 回答
0

为了能够在数据库中持久化,必须在事务中。因此,您可以更好地解决它是注释@Transactional ...例如在方法上

这也让我前段时间疯狂了几个小时。

于 2013-11-22T19:49:54.387 回答
0

你在课堂上使用注释吗?如果是这样,请确保你 <context:component-scan base-package="com.vitornobrega.myapp">因为来自 jpa 配置的 arpart 我可以看到你在哪里注入你的依赖项。

于 2015-05-17T15:14:07.823 回答