GuiceModule类:
public class GuiceModule extends ServletModule {
@Override
protected void configureServlets() {
// start the service
bind(JPAInitializer.class).asEagerSingleton();
// PersistFilter
filter("/*").through(PersistFilter.class);
// jpa + guice
install(new JpaPersistModule("drone-cloud"));
// bindings
bind(UserService.class).to(UserServiceImpl.class);
bind(TwoFactorAuthenticator.class).to(GoogleAuthenticator.class);
bind(ImageQueue.class).asEagerSingleton();
bind(DroneCloudServerHandler.class).asEagerSingleton();
}
}
import javax.inject.Inject;
import com.google.inject.persist.PersistService;
public class JPAInitializer {
@Inject
JPAInitializer(PersistService service) {
service.start();
}
}
控制器类:
@Consumes(MediaType.APPLICATION_JSON)
@Path("/mission")
public class MissionController {
@Inject
Provider<EntityManager> _em;
@Path("/new")
@POST
@Transactional
public String newMission(SimpleMission mission) {
_em.get().persist(mission);
_em.get().flush();
_em.get().close();
return "{ \"mission_id\": \"" + mission.getId() + "\" }";
}
}
和StackTrace:
我做错了什么?
谢谢
问题在于MissionController
类是由Jersey管理的,而不是由Guice管理的,因此JPalocaltXNInterceptor
不会截获它
我通过将与DB相关的代码移到另一个类中来解决它,如下所示:
class MissionController {
@Inject MissionDao dao;
....
}
public class MissionDao {
@Inject Provider<EntityManager> em;
@Transactional
public void save(SimpleMission mission) {
em.get().persist(mission);
}
...
}
问题内容: When I call: 我得到标题中提到的异常。 我正在使用Hibernate JPA。 问题答案: 在我自己遇到这个问题并花了几个小时试图解决这个问题之后,我终于找到了一个原因:Spring有一个错误,并且@如果同一类具有用于自动装配的注释,则无法维护带有注释的事务。 一旦从相关服务类中删除了注释,并且在XML配置中声明了一个适当的bean: 问题解决了。
我正在Spring3和Hibernate3中进行产品构建,我已经更新了这个Hibernate5和Spring5。现在我可以部署应用程序了,但是当我尝试与数据库连接时,会得到“javax.persistence.TransactionRequiredException:no transaction is in progress”
我正在自己配置Spring Boot应用程序,以运行两个数据库(两个transactionManager相同)。MariaDB和MongoDb。在@Repository中,我已经用@PersistenceContext使用了@Autowired,注释@Transactional正在正确地使用TransactionManager。但对我来说,最有用的是在@Services层上添加@Transacio
当我尝试使用spring batch中的作业处理器将从csv文件恢复的一些数据持久化到我的数据库中时,控制台中会出现这个错误,对于我的dao来说,我使用的是hibernate 我已经尝试了2种方法,但同样的问题! 错误:javax.persistence.transactionRequiredException:在org.hibernate.internal.sessionimpl.checktr
我有一个JPA web应用程序,其中包含一些针对JPA存储库的集成测试。目前还没有针对Neo4J存储库的集成测试。 现在,我已经向这个现有的JPA web应用程序添加了一些Neo4J功能。 我现在使用Neo4J存储库和JPA存储库。我的实体和存储库的名称不同,并且位于不同的包中。 我的所有测试都扩展了以下类: 当应用程序配置没有任何配置时,测试可以正常运行 但在添加Neo4J配置时出现异常错误: