Spring JPA未存储到数据库
当我在我的服务上运行JUnit测试时,它会成功地将新实体添加到我的数据库中,但是当我从控制器调用该服务时,它不会保存到数据库中。我错过了什么 jpa.xmlSpring JPA未存储到数据库,spring,hibernate,jpa,Spring,Hibernate,Jpa,当我在我的服务上运行JUnit测试时,它会成功地将新实体添加到我的数据库中,但是当我从控制器调用该服务时,它不会保存到数据库中。我错过了什么 jpa.xml <jpa:repositories base-package="com.mypackage.commons" /> <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<jpa:repositories base-package="com.mypackage.commons" />
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jdbcDataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<!-- spring based scanning for entity classes -->
<property name="packagesToScan" value="com.mypackage" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" />
<tx:annotation-driven />
MyController
@Controller
@Path("/users")
public class MyAPI {
@Autowired
private UserService userService;
@POST
@Path("/add")
@Consumes(MediaType.APPLICATION_JSON)
@Transactional
public Response addUser(User newUser) {
userService.create(newUser);
}
}
为事务设置entityManager:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
为什么在控制器级别使用
@Transactional
?我想我在一些博客文章中看到了它,所以尝试了它,希望解决我的问题我认为@Transactional应该只用于服务级别,因为你不需要控制器上的持久实例,但即使没有它,我的实体仍然没有在数据库中持久化我得到了javax.persistence.TransactionRequiredException:没有正在进行的事务
当我尝试saveAndFlush
时,没有代理target class=“true”的情况下,是否仍然可以让它工作?是的,您需要在EntityManagerFactory中包含cglib
并配置jpa属性。对于我应该查看的内容,您是否有任何链接或建议?
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
@Transactional(propagation= Propagation.REQUIRED)
@Override
public User create(User user) {
try{
return userRepository.saveAndFlush(user);
} catch(DataIntegrityViolationException e){
// handle the exception in here to find out what is wrong
}
}