Search code examples
sqlitetransactionsmicronaut

How to make a method transactional in micronaut


I am using micronaut with sqlite db in my appliation and service class method looks like this:-

   private void loadListIntoDb(Stream<EmpDto> lines) {
       try {
            empRepository.deleteAll();
            lines.forEach(empRepository::saveEmpList);
        } catch (Exception ex) {
            throw new RuntimeException("error while loading file into db", ex);
        }
    }

What I want is if saveEmpList get failed, all the deleted data by deleteAll method should also get reverted back.

I have tried like this to test but it didn't rolled back the deleted items:

   @Transactional
   private void loadListIntoDb(Stream<EmpDto> lines) {
       try {
            empRepository.deleteAll();
            throw new Exception("test exception");
        } catch (Exception ex) {
            throw new RuntimeException("error while loading file into db", ex);
        }
    }

Is there anything that I am missing.

Regards,


Solution

  • Finally resolved it. We can't make a private method transactional in Micronaut. We need to make the method as public.