named parameter bind only works on the where clause. what if you want different schema at runtime for the table part. such as
'select * from :tablename where ...'
'update :tablename set ..."
You will find the above won't work in your @Query annotation
use EntityManager::createNativeQuery

You can get the single result, the first result, result lists or result stream.

use entityManager.createNativeQuery(sql).executeUpdate()
use executeUpdate to update or delete records in the table

Not allowed to create transaction on shared EntityManager
Caused by: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
Please call joinTransaction before execute update sql
