I @Service li uso solo per la login. Ti mostro come è articolato il mio progetto e come uso le query.
Controller:
@Controller
public class ControlloPagineWeb {
@Autowired
private UtenteRepository utenteRepository;
@Autowired
private RuoloRepository ruoloRepository;
@Autowired
// ...
// ...
@RequestMapping(value = "/pannello-di-controllo", method = RequestMethod.GET)
public String pannelloControlloGet(
Model model,
Principal principal,
HttpSession session,
HttpServletRequest request,
HttpServletResponse response
) {
// ...
try{
// ...
// Questa classe permette di recuperare dei record da una tabella del dbms.
// Tutto quello che viene recuperato dal database viene salvato in 'eseguiVariabiliDiSistema.getVariabiliDiSistema()'
// e trasmesso alla pagina html grazie a "VariabiliDiSistema".
EseguiVariabiliDiSistema eseguiVariabiliDiSistema = new EseguiVariabiliDiSistema(
// ...
utenteRepository, // Questo oggetto lo passo a EseguiVariabiliDiSistema ma vorrei non doverlo fare!!!
// ...
);
model.addAttribute("VariabiliDiSistema", eseguiVariabiliDiSistema.getVariabiliDiSistema());
}catch (Exception e){
model.addAttribute("VariabiliDiSistema", null);
}
return "pannello-di-controllo";
}
// ...
}
Classe in cui non riesco a caricare utenteRepository:
public class EseguiVariabiliDiSistema {
// ...
private List<VariabileSistema> variabiliDiSistema = null;
// ...
// Costruttori
public EseguiVariabiliDiSistema() {
}
public EseguiVariabiliDiSistema(
// ...
UtenteRepository utenteRepository,
// ...
) {
// ...
}
public List<VariabileSistema> trovaTutteLeVariabili(
// ...
UtenteRepository utenteRepository,
// ...
){
// ...
// Qui viene lanciata la query e riempito un oggetto java.
List<VariabileSistema> tutteLeVar = variabileSistemaRepository.trovaTutte();
// ...
}
// ...
public VariabileSistema getVariabileDiSistema() {
return variabileDiSistema;
}
// ...
}
Classe in cui risiedono le query in postgresql:
@Repository
public class VariabileSistemaRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
@Transactional(readOnly=true)
public List<VariabileSistema> trovaTutte() {
return jdbcTemplate.query("SELECT * FROM variabili_sistema;", new VariabileSistemaRowMapper());
}
// ...
}
Quello che vorrei fare è poter usare l'oggetto VariabileSistemaRepository in EseguiVariabiliDiSistema mentre al momento VariabileSistemaRepository lo imposto da ControlloPagineWeb.
Ti è più chiaro il passaggio oppure ti serve sapere altro?
Ovviamente ho anche gli oggetti VariabileSistemaRowMapper e VariabileSistema che servono però a jdbcTemplate per funzionare (se serve posto anche loro ma c'è poso di interessante).