Du använder behållaren för att hantera persistens. Genom att använda transaktion KRÄVS kommer JPA att starta en ny transaktion för varje anrop till databasen. Därför är det inte nödvändigt att starta eller utföra en transaktion inom den lagrade proceduren. Det är faktiskt en dålig idé.
Du nämner inte om du startar en ny transaktion i den lagrade proceduren, bara att du har en commit där. Om du inte startar en (ny) transaktion kommer den commit att orsaka problem. Även om du gör det är det onödigt, det här är den sortens saker vi använder JPA för till att börja med.