J'essaie de faire une application simple à l'aide de la base de données Spring, JPA et H2 intégrée. Récemment, j'ai rencontré ce problème étrange avec les transactions déclaratives. Ils ne s'engagent tout simplement pas si j'attends mon DAO avec une annotation @RePository. Plus spécifiquement, je reçois une exception sur Flush:
@Controller public class HomeController { @Inject JpaDao dao; @RequestMapping("/add") public @ResponseBody String add(String name) { Professor p = new Professor(name); dao.addProfessor(p); return ":)"; } }
3 Réponses :
L'annotation code> @TransActional > peut être placée avant une définition d'interface, une méthode sur une interface, une définition de classe ou une méthode publique sur une classe. Cependant, veuillez noter que la simple présence de l'annotation code> code> n'est pas suffisante pour allumer le comportement transactionnel - l'annotation de printemps doc http://static.springsource.org /spring/docs/2.0.8/Reference/transaction.html P> @Transactional code> est simplement des métadonnées pouvant être consommées par quelque chose qui est
@Transactional code> -aware et qui peut utiliser les métadonnées pour configurer les haricots appropriés avec un comportement transactionnel. Dans le cas de l'exemple ci-dessus, il s'agit de la présence de la
Voulez-vous vraiment citer les documents de printemps à partir de la version 2.0.8?
Avez-vous même lu la question? J'ai eu
Juste une supposition, mais vous n'avez pas besoin d'enregistrer votre propre Comme je l'ai dit, cependant, juste un hunch. p> persistenceannotationBeanpostProcessor code>, puisque
Probablement parce que le composant code> dans votre Par conséquent, l'ajout de cette balise est en fait une mauvaise solution car elle crée toujours vos instances DAO dans le mauvais contexte d'application: mieux créer un J'ai eu ce même problème parce que je pensais un Spring-servle.xml code> comprend également vos classes DAO dans sa numérisation et crée donc des instances pour eux dans son contexte d'application ( Pas la "base de données" One) ... de sorte que lorsque votre Web accède à ces DAOS à partir de contrôleurs Web, il accède aux versions non transactionnelles d'entre eux (sauf si vous ajoutez que
TX: TZ: Tag CODE> TX) . P>
plus spécifique de la configuration code> de la création de composants Web. p>
printemps-servlet.xml code> prenait soin de seulement la numérisation
@ Contrôleur code> classes ... mais non: - ( p>
Essayez d'échanger
@Inject code> pour
@autowired code>
est
@beerbajay a essayé, même résultat.
Très utile, merci. Je me suis battu avec un problème similaire pour deux jours et je me déplace Code> dans le contexte principal a également fonctionné pour moi. Merci.