Let's say I have two models and for every model, I have a JPA repository interface like so:
public interface IPersonJPARepository extends JpaRepository<Person, Long> {
.....
}
public interface ICountryJPARepository extends JpaRepository<Country, Long> {
.....
}
Then I would like to have a DAL class for every model where I can use ORM methods for CRUD. Example:
@Repository
public class PersonDal implements IPersonDal {
@Autowired
IPersonRepository repo;
@Override
public List<Person> getAll() {
return repo.findAll();
}
}
@Repository
public class CountryDal implements ICountryDal {
@Autowired
ICountryRepository repo;
@Override
public List<Country> getAll() {
return repo.findAll();
}
}
Then the problem occurred when starting Sonarqube to analyze my code because definitely, Sonarqube sees that in both getAll() methods I am using the same line to get all the objects for a specific model. So my question is what is the solution for this Sonarqube problem?
Follow Naming Convention for variables. The variable names can be representative nouns and not general words. In your case, change like below:
@Autowired
ICountryRepository countryRepository; // or countryRepo
And
@Autowired
IPersonRepository personRepository; // or personRepo
And if you really have a dupicate code, copy it to a an interface or a super class and extend/implement the parent using inheritance.