Итак, мы используем аннотацию, чтобы указать, что для класса требуется транзакция, подобная этой:
@TransactionAttribute (TransactionAttributeType.REQUIRED)
public class Foo() {
...
}
В битах кода этого класса, которые фактически вносят изменения в базу данных, мы обнаружили, что эти измененияне были видны другим частям кода в этом классе, иногда даже следующей строке.Таким образом, нам удалось заставить все работать, очистив запрос, и это действительно странно.Я ожидал, что из-за аннотации транзакция будет работать правильно, но нам кажется, что нам приходится много массажировать, чтобы заставить ее работать.
Я потратил много времени на поиск в Google иТо, что я нашел, относится к использованию этой аннотации в XML-файле, а не прямо в коде.Я надеюсь, что кто-то может либо объяснить поведение кода, либо, по крайней мере, указать мне на веб-сайт, который на самом деле имеет дело с аннотацией @.
Редактирования: Мы используем JBoss и hibernate, и вотбыстрый пример кода, который не работает
System.out.println("before:" + some_obj.getName());
util = (UtilFacade) EJBFactory.lookup(UtilFacadeBean.class);
some_object.setName("changed");
util.persistEntity(some_obj);
util.refreshEntity(some_obj); // reloads the object to get fresh data
System.out.println("after:" + some_obj.getName());
Вывод этого кода выглядит следующим образом:
>>before:start name
>>after:start name
, но мы ожидали, что второй код покажет >> после: изменено
Нам удалось обойти это, добавив util.flush ();после вызова util.persistEntity ().
Для вызовов util используется EntityManager, использующий hibernate API.
Если мой вопрос неясен, дайте мне знать, что еще нужночтобы узнать, и я сделаю попытку его редактирования.
заранее спасибо!