Spring JPA未存储到数据库

Spring 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">

当我在我的服务上运行JUnit测试时,它会成功地将新实体添加到我的数据库中,但是当我从控制器调用该服务时,它不会保存到数据库中。我错过了什么

jpa.xml

<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            
        }
    }