uld*_*all 5 java hibernate jpa transactions guice-persist
我正在尝试使用Guice Persist创建一个带有@Transactional注释方法的简单服务类:
public class TestServiceImpl implements TestService {
@Inject
private Provider<EntityManager> entityManager;
@Override
@Transactional
public Long createEvent(String name) {
Event event = new Event(name);
System.out.println("Is transaction active? " + entityManager.get().getTransaction().isActive() );
entityManager.get().persist(event);
return event.getId();
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,Guice Persist没有创建任何交易.日志输出可以在这里看到:http://pastebin.com/Mh5BkqSC
请注意第450行的打印:
交易是否有效?假
结果是数据库中没有存储任何内容:
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+--------------------+----------+----------
public | events | table | postgres
public | hibernate_sequence | sequence | postgres
(2 rows)
mydb=# select * from events;
id | name
----+------
(0 rows)
mydb=#
Run Code Online (Sandbox Code Playgroud)
我按以下方式设置应用程序:
public static void main(String[] args) {
Injector injector = Guice.createInjector(new TestModule(), new JpaPersistModule("postgresPersistenceUnit"));
PersistService persistService = injector.getInstance(PersistService.class);
persistService.start();
TestService serviceToTest = injector.getInstance(TestService.class);
Long id = serviceToTest.createEvent("test");
System.out.println("Id: " + id);
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样TestService是由Guice创建的,而我正在使用它JpaPersistModule,这应该是什么@Transactional接线.
我创建了一个小型Maven项目来演示这个问题:https://github.com/uldall/guice-persist-error
通过切换@javax.transaction.Transactional到解决问题@com.google.inject.persist.Transactional.显然,Guice-Persist不支持@TransactionalJava Transaction API中的注释.
| 归档时间: |
|
| 查看次数: |
1614 次 |
| 最近记录: |