Depolanan bir prosedürü çağırmak ve bazı verileri almak için basit bir web uygulaması yazıyorum. Müşterinin veritabanıyla etkileşime giren çok basit bir uygulamadır. Çalışan kimliğini ve şirket kimliğini iletiriz ve depolanan prosedür çalışan ayrıntılarını döndürür.
Web uygulaması verileri güncelleyemiyor / silemiyor ve SQL Server kullanıyor.
Web uygulamamı Jboss AS'de kuruyorum. Depolanan yordama erişmek için JPA kullanmalı mıyım veya CallableStatement
. Bu durumda JPA kullanmanın herhangi bir avantajı.
Ayrıca bu saklı yordamı adlandırmak için sql ifadesi ne olacaktır. Daha önce hiç depolanmış prosedür kullanmadım ve bununla mücadele ediyorum. Google pek yardımcı olmadı.
İşte saklı yordam:
CREATE procedure getEmployeeDetails (@employeeId int, @companyId int)
as
begin
select firstName,
lastName,
gender,
address
from employee et
where et.employeeId = @employeeId
and et.companyId = @companyId
end
Güncelleme:
JPA kullanarak saklı yordamı çağırmada sorun yaşayan herkes için .
Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",
EmployeeDetails.class)
.setParameter(1, employeeId)
.setParameter(2, companyId);
List<EmployeeDetails> result = query.getResultList();
Fark ettiğim şeyler:
- Parametre adları benim için çalışmadı, bu yüzden parametre dizinini kullanmayı deneyin.
- Doğru sql deyimi
{call sp_name(?,?)}
yerinecall sp_name(?,?)
- Saklı yordam bir sonuç kümesi döndürüyorsa, yalnızca bir satır olduğunu bilseniz bile
getSingleResult
çalışmaz - Bir
resultSetMapping
ad veya sonuç sınıfı ayrıntılarını iletin