En realidad, puede resolver tu problema.
El contenedor EJB "escucha" cualquier excepción que tu método de negocio reintentable pueda lanzar, y cuando atrapa una, investiga toda su cadena de causas. Si encuentra una excepción que está en la lista de retryOn, entonces el método se volverá a intentar.
Lo que es algo extraño aquí es tu caso de uso particular. En una situación normal, no puedes manejar DuplicateKeyException con un reintentar método, porque esta excepción te indica que se está intentando violar el estado de la base de datos. En un reintentar método, solo puedes tener éxito si realizas alguna lógica de eliminación (para limpiar la tabla), tal vez...