sql >> Databáze >  >> RDS >> Oracle

Seam @Transakční anotace nefunguje?

Nevím, jak Seam funguje, takže se předem omlouvám, pokud tato odpověď neplatí.

Všiml jsem si, že metoda, která je @Transactional je protected . Z toho mi vyplývá, že je volána jinou interní metodou.

Pomocí Spring's AOP označíte veřejné metody s @Transactional které jsou zabaleny a nahrazeny transakčním proxy. Když externí třída zavolá public je to volání proxy, která tvoří transakci. Pokud externí třída volá jinou public metoda, která není označeno @Transactional která pak volá interní metodu, což znamená, že nebude vytvořena žádná transakce, protože proxy není vůbec volána.

Na jaře, i když změníte doWork() způsob být veřejný, nastal by stejný problém. Žádná transakce, protože není volán objekt proxy. Volání metod prováděná uvnitř třídy neprovádějí volání objektu proxy.

Rychlé přečtení některé dokumentace naznačuje, že stejně jako Spring AOP i Seam používá CGLib proxying . Otázkou je, zda je schopen proxy všechny metody -- i když jsou volány z proxy objektu. Omlouváme se za ztrátu času, pokud tato odpověď neplatí.




  1. GROUP BY a COUNT pomocí ActiveRecord

  2. ID nemůže být null (automatické zvýšení)

  3. Připojení MySQL přes localhost nefunguje, ale 127.0.0.1 funguje

  4. MySQL -- Aktualizujte, pokud existuje, jinak vložte pomocí dvou klíčů