Can you do bulk delete in one transaction using JPA and Hibernate?

The common way to perform bulk deletes with Hibernate and JPA is exactly as you proposed in your last solution - a bulk delete query in HQL/JPQL

DELETE FROM MyEntity e WHERE e.id IN (:ids)

This should be by far the most efficient one as Hibernate does not need to load and instantiate the entities.

Consider putting the bulk delete into it's own transactional method and calling the method as soon as you can in your other method - the persistence context is not updated with the results of the query, so you want to prevent your persistence context from containing stale data.