当前位置: 首页 > 知识库问答 >
问题:

当创建新条目时,没有使用JPA和spring更新数据库

焦驰
2023-03-14

我正在使用Spring框架配置一个简单的JPA应用程序。我的目标是在JUnit测试运行期间用数据填充db。我明白这并不理想。但我想要它有不同的用途。

下面是我的persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    version="1.0">
    <persistence-unit name="tothought-tutorial-test" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
        <!--    <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
        <property name="hibernate.hbm2ddl.auto" value="create-drop" /> -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

test-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.2.xsd">

    <!-- Database -->
    <!--  <jdbc:embedded-database id="datasource" type="H2"></jdbc:embedded-database> -->

    <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/to_thought_tutorial" />
        <property name="username" value="demo" />
        <property name="password" value="demo" />
    </bean>

    <!-- Entity Manager -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="datasource" />
        <property name="persistenceUnitName" value="tothought-tutorial-test" />
    </bean>

    <!-- Transaction Manager -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <!-- Jpa Repositories -->
    <jpa:repositories base-package="com.cloudfoundry.tothought.repositories"></jpa:repositories>
</beans>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:META-INF/test-context.xml")
@Transactional
public class PostPartRepositoryTest {

    @Autowired
    PostPartRepository repository;

    @Test
    public void test() {
        PostPart postPart = new PostPart();
        String body = "Hello";
        postPart.setBody(body);

        repository.save(postPart);

        PostPart dbPostPart = repository.findOne(postPart.getPostPartId());
        assertNotNull(dbPostPart);
        assertEquals(body, dbPostPart.getBody());
    }

    @Test
    public void insertTest(){

        Post post = new Post();
        post.setPostDate(new Date());
        post.setTitle("First Post");

        PostPart postPart = new PostPart();
        String body = "Hello";
        postPart.setBody(body);

        postPart.setPost(post);

        repository.save(postPart);

        PostPart dbPostPart = repository.findOne(postPart.getPostPartId());
        assertNotNull(dbPostPart);
        assertNotNull(dbPostPart.getPost());
        assertEquals(body, dbPostPart.getBody());
    }

}

共有1个答案

澹台星剑
2023-03-14

您不会看到任何条目,因为您使用@transactional使用SpringJunit4ClassRunner运行测试。使用@transactional运行测试的默认情况是,一旦测试完成,任何数据库更改都将自动回滚。有关更多信息,请参见此问题

这些事情发生的顺序如下:

  1. 开始测试,运行安装脚本,从而创建表。
  2. 测试在事务性上下文中开始运行。
  3. 测试完成运行,测试期间所做的任何数据库更改都会自动回滚,使数据库保持测试运行前的状态。
 类似资料:
  • 我有一些实体类,其id配置如下 接下来是我的问题。例如,第一天,我获取所有记录并保存它们。但是第二天我会再次得到所有的记录,包括第一天已经保存的记录。当我试着拯救第二天的时候会发生什么?是所有记录都将再次插入还是Spring数据只插入新记录,从第一天开始的旧记录将被更新?我需要第二种情况下的行为

  • 基本上,我想根据ID更改状态。没有错误,但它没有更新。 index.php booking.php

  • 现在你已经知道了怎样用CodeIgniter从数据库中读取数据,但还不知道怎样往数据库中写入数据。在这一节中,你将学到通过怎么扩展之前写过的新闻控制器和数据模型来实现这一功能。 创建一个表单 为了向数据库里输入数据,你需要创建一个表单来输入需要被存储的信息。这就是说你需要一个带两个输入域的表单,一个用来输入标题,一个用来输入内容。另外,你可以通过数据模型中的标题来取得slug。在 applicat

  • 现在你已经知道如何通过 CodeIgniter 从数据库中读取数据了,但是你还没有 向数据库中写入数据。在这一节,你将继续完善前文中创建的 News 控制器和模型, 添加上这一功能。 创建一个表单 为了向数据库中写入数据,你需要先创建一个表单用来填写要存储的信息,这意味着 你的表单里需要包含两项:一项代表标题,另一项代表内容。你可以在模型中通过代码 从标题中提取出 slug。在文件 applica

  • 这个问题几乎说明了一切。使用JPARepository,我如何更新一个实体? JPARepository只有一个save方法,它并不告诉我它实际上是create还是update。例如,我向数据库用户插入一个简单的对象,它有三个字段:、和: 然后我只需调用,此时它实际上是对数据库的插入: 到目前为止还不错。现在我想更新这个用户,比如说改变他的年龄。为此,我可以使用查询,无论是QueryDSL还是Na

  • 我有一个相当棘手的问题。 我所拥有的: