Ну, у меня есть класс, введенный CDI, как показано ниже:
@Named
@RequestedScoped
public class MyClass{
@Transactional
public void start(){
for(int i = 0; i < 100;i++){
//do some logic
forceSave();//should save immediately
}
}
@Transactional(value = Transactional.TxType.REQUIRES_NEW)
public void forceSave(){
}
}
Несчастен, это не работает. ForceSave () работает в той же транзакции, что и метод start (). Мне нужно создать другой класс, поместите forceSave () в этот другой класс, и все будет работать так:
@Named
@RequestScoped
public class MyClass{
@Inject
private MyClassTwo two;
@Transactional
public void start(){
for(int i = 0; i < 100;i++){
//do some logic
two.forceSave();//should save immediately
}
}
}
@Named
@RequestScoped
public class MyClassTwo{
@Transactional(value = Transactional.TxType.REQUIRES_NEW)
public void forceSave(){
}
}
Это второе решение работает отлично, но очень уродливо. Мне нужно всегда создавать другой класс, чтобы использовать новую транзакцию. Есть еще один способ это исправить?