All I am saying is that records should not be 'active'.
It is BOILER PLATE.
should be (in ServiceManager class)
public Result calculateYearEndResults(Account a)
In short: records should be minimal javabeans. only getters and setters.
in other words:
what OOP should have done, here its done by a tool which is bad (which doesnt mean that the tool does only what OOP can do).
However, transactions at the entity layer will, by default, participate in a transaction declared in a service.
there is no entity layer.
entities MUST NOT have a field of type EntityManager !
that is a sufficient condition for all problems to go away.