Procedurę składowaną można wywołać przy użyciu javax.persistence.StoredProcedureQuery. Nie musisz nawet deklarować niczego w swojej encji.
Sugeruję przeniesienie procedury wywołującej logikę do usługi, a następnie wywołanie metody usługi ze swojego kontrolera.
Na przykład:
@Service
public class LoginServiceImpl implements LoginService {
@PersistenceContext
private EntityManager entityManager;
public Boolean checkUsernameAndPassword(String username, String password) {
//"login" this is the name of your procedure
StoredProcedureQuery query = entityManager.createStoredProcedureQuery("login");
//Declare the parameters in the same order
query.registerStoredProcedureParameter(1, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
query.registerStoredProcedureParameter(3, Integer.class, ParameterMode.OUT);
query.registerStoredProcedureParameter(4, String.class, ParameterMode.OUT);
//Pass the parameter values
query.setParameter(1, username);
query.setParameter(2, password);
//Execute query
query.execute();
//Get output parameters
Integer outCode = (Integer) query.getOutputParameterValue(3);
String outMessage = (String) query.getOutputParameterValue(4);
return true; //enter your condition
}
}
Następnie możesz wywołać tę metodę ze swojego kontrolera, po wstrzyknięciu swojej LoginService
.