Możesz umieścić je w interfejsie, ale pamiętaj, że w niektórych przypadkach transakcje mogą się nie zdarzyć. Zobacz drugą wskazówkę w sekcji 10.5.6 dokumentacji Spring:
Spring zaleca, aby dodawać adnotacje tylko do klas konkretnych (i metod klas konkretnych) za pomocą adnotacji @Transactional, w przeciwieństwie do opisywania interfejsów. Z pewnością możesz umieścić adnotację @Transactional na interfejsie (lub metodzie interfejsu), ale działa to tylko tak, jak byś się tego spodziewał, jeśli używasz serwerów proxy opartych na interfejsie. Fakt, że adnotacje w języku Java nie są dziedziczone z interfejsów, oznacza, że jeśli używasz serwerów proxy opartych na klasach (proxy-target-class = "true") lub aspektu tkania (tryb = "aspektj"), ustawienia transakcji są nie jest rozpoznawany przez infrastrukturę proxy i tkania, a obiekt nie zostanie opakowany w transakcyjne proxy, co byłoby zdecydowanie złe.
Z tego powodu zalecałbym umieszczenie ich na implementacji.
Dla mnie również transakcje wydają się szczegółem implementacji, więc powinny znajdować się w klasie implementacji. Wyobraź sobie, że masz implementacje opakowujące do rejestrowania lub testowania implementacji (makiety), które nie muszą być transakcyjne.