相关疑难解决方法(0)

每当我说@Transactional时,回滚每个检查过的异常

由于程序员被强制捕获所有已检查的异常,因此我会在出现任何问题时抛出已检查的异常.我想回滚任何这些期望.写rollbackFor=Exception.class每个@Transactional注释是非常容易出错的,所以我想告诉春天:"每当我写@Transactional,我的意思是@Transactional(rollbackFor=Exception.class)".

我知道,我可以创建一个自定义注释,但这似乎不自然.

那么有没有办法告诉spring它应该如何处理全局检查的删除?

java spring jpa jpa-2.0

36
推荐指数
2
解决办法
2万
查看次数

使用Entity Manager的Spring junit测试不会在H2文件系统数据库中插入数据

首先我的设置:

  • JUnit版本:4.11
  • H2版本:1.3.174
  • Spring版本:4.0.5.RELEASE
  • Hibernate版本:4.1.0.Final

一点背景:

我有一个REST Web服务,它部署在Tomcat Web服务器上,下面有一个h2数据库.我有一个没有任何POST/PUT方法的REST服务.在为其编写集成测试时,我使用H2控制台手动添加了数据库中的条目,并将h2文件放在服务器上.最后,我的集成测试调用REST服务,并返回在DB中手动注入的数据,测试成功.这是不可维护的,为每个测试注入我需要的数据会很棒(这种方法可以用于以后的其他集成测试......).目标是将数据注入与Tomcat上部署的应用程序使用的数据库相同的数据库中.

我认为这很容易,我编写了一个集成测试,重用了服务器端使用的相同应用程序上下文:

 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="org.h2.Driver" />
  <property name="url" value="${database.url}" />
  <property name="username" value="" />
  <property name="password" value="" />
</bean>

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="be.wiv_isp.healthdata.catalogue.domain" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
        </props>
    </property>
</bean>

<bean id="jpaVendorAdaptor" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="emf" />
</bean>
Run Code Online (Sandbox Code Playgroud)

数据库url在属性fil中定义的位置:

database.url=jdbc:h2:file:${healthdata.working.dir}/database/database-catalogue;AUTO_SERVER=true
Run Code Online (Sandbox Code Playgroud)

然后我将EntityManager注释为我的PersistenceContext并编写了一个简单的单元测试:

@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = {"classpath:/applicationContext-it-test.xml"})
public …
Run Code Online (Sandbox Code Playgroud)

java junit spring hibernate h2

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

spring ×2

h2 ×1

hibernate ×1

jpa ×1

jpa-2.0 ×1

junit ×1