0
springのように見えるサービスクラスの@Transactionalアノテーションは無視されます。 私はいくつかのq&a on SOとblogsを読んだが、どれも私にとってはうまくいかないようだ。Springは@Transactionalアノテーションを無視します
- 私はプライベートメソッドを呼び出していないよ - 私は、インターフェイス上で公開されパブリックメソッドを呼び出します。
- 私は別のクラスのメソッドを呼び出しています(つまり、同じクラスから呼び出していない)。
- 私の「サービス」クラスには、
@Component
と@Transactional
と注釈が付けられています。 。 - 私の「サービスクラスがインタフェースを持っている、と私はインターフェイス、および
@Inject
注釈を使用して、それを注入してい - 答えの一つに、ここで説明したように私は
proxy-target-class="true"
を追加しようとした - 。動作しませんでした - I 。私はこの例外を取得するときに「(スプリングMVCではない)JAX-RSを用いたM
エラーが@Transactional(propagation = Propagation.MANDATORY)
で注釈DAO層、で発生:
org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'
以下に、関連するクラスとインタフェースを表す一般的なコードを示します。
public interface IService<T extends BaseEntity> {
void save(T entity);
}
public abstract class AbstractService<T extends BaseEntity> implements IService<T> {
@Inject
private IDao dao;
@Override
public void save(T entity) {
dao.save(entity);
}
}
public interface IPersonService extends IService<PersonEntity> {
void saveAll(List<PersonEntity> persons);
}
@Component
@Transactional
public class PersonService extends AbstractService<PersonEntity> implements IPersonService {
@Override
public void saveAll(List<PersonEntity> persons) {
for (PersonEntity person : persons) {
super.save(person);
}
}
}
@Component
public class PersonApi {
@Inject
private IPersonService personService;
public void saveAll(...) {
...
personService.saveAll(persons);
}
}
アイデアや提案はありますか?
同じクラスのメソッドを呼び出す場合は、このようなことはありません。 AOPは、内部メソッド呼び出しではなく、外部メソッド呼び出しに対してのみ機能します。ただし、コードを追加していないので、エラーがどこにあるかはわかりません。 –
あなたはそれが機能しないと思いますか?いくつかのコードを共有できますか? – Leffchik
私は同じクラスのメソッドを呼び出していません。私が言ったように、私はそれのインターフェイスを使用してサービスを注入している、私はインターフェイスを使用して呼び出す。 いくつかのコードサンプルを提供しています... –