我試圖創建一個簡單的服務類使用吉斯堅持一個@Transactional註解的方法:@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();
}
}
遺憾的是沒有交易由吉斯創建堅持。日誌輸出可以在這裏看到: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=#
我設置以下列方式應用:
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);
}
正如你可以看到TestService
由吉斯創建,我正在使用JpaPersistModule
,這應該是@Transactional
接線的內容。
我創建了一個小型Maven項目演示問題:https://github.com/uldall/guice-persist-error