Java Jersey JPA-500仅当从SP返回带有参数的结果集时
我用的是运动衫和JPA。如果不使用带参数的存储过程,我的查询将按预期工作。如果存储过程使用参数,则从查询到数据库的数据将完全返回。在调试时,我可以看到列表中的数据,一直返回到控制器上的return语句,然后得到一个500。(在调试时,我收到消息类not found,这让我有点紧张,因为没有参数,一切正常)。任何帮助都将不胜感激 回购代码Java Jersey JPA-500仅当从SP返回带有参数的结果集时,java,rest,jpa,stored-procedures,jersey,Java,Rest,Jpa,Stored Procedures,Jersey,我用的是运动衫和JPA。如果不使用带参数的存储过程,我的查询将按预期工作。如果存储过程使用参数,则从查询到数据库的数据将完全返回。在调试时,我可以看到列表中的数据,一直返回到控制器上的return语句,然后得到一个500。(在调试时,我收到消息类not found,这让我有点紧张,因为没有参数,一切正常)。任何帮助都将不胜感激 回购代码 package com.aeolos.dao; import java.util.List; import javax.persistence.Entity
package com.aeolos.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.ParameterMode;
import javax.persistence.Query;
import javax.persistence.StoredProcedureQuery;
import com.aeolos.listener.LocalEntityManagerFactory;
import com.aeolos.model.Employee;
import com.aeolos.model.Callback;
public class EmployeeRepo implements IEmployeeRepo {
EntityManager em = LocalEntityManagerFactory.createEntityManager();
@Override
public Employee getEmployee(long id) {
try {
Employee test = new Employee();
test = em.find(Employee.class, id);
return test;
} finally {
em.close();
}
}
@Override
public List<Employee> getStoredEmployee() {
try {
Query query = em.createStoredProcedureQuery("GetAllEmployees", Employee.class);
List<Employee> result = query.getResultList();
return result;
} finally {
em.close();
}
}
@Override
public Employee save(Employee employee) {
try{
em.persist(employee);
em.flush();
return employee;
} finally {
em.close();
}
}
@Override
public List<Callback> getAllCallbacks() {
try {
Query query = em.createStoredProcedureQuery("GetAllCallbacks", Callback.class);
List<Callback> result = query.getResultList();
return result;
} finally {
em.close();
}
}
@Override
@SuppressWarnings("unchecked")
public List<Callback> getCallbacksByDateTime(String cbdate, String cbtime) {
try {
StoredProcedureQuery query = em.createStoredProcedureQuery("GetCallbacksByDateTime");
query.registerStoredProcedureParameter("paramDate", String.class, ParameterMode.IN);
query.registerStoredProcedureParameter("paramTime", String.class, ParameterMode.IN);
query.setParameter("paramDate", cbdate);
query.setParameter("paramTime", cbtime);
query.execute();
List<Callback> result = query.getResultList();
return result;
} finally {
em.close();
}
}
@Override
public Callback getCallback(long id) {
try {
Callback result = new Callback();
result = em.find(Callback.class, id);
return result;
} finally {
em.close();
}
}
@Override
public Callback SaveCallback(Callback callback) {
try{
em.getTransaction().begin();
em.persist(callback);
em.flush();
em.getTransaction().commit();
return callback;
} finally {
em.close();
}
}
}
package com.aeolos.dao;
导入java.util.List;
导入javax.persistence.EntityManager;
导入javax.persistence.ParameterMode;
导入javax.persistence.Query;
导入javax.persistence.StoredProcedureQuery;
导入com.aeolos.listener.LocalEntityManagerFactory;
导入com.aeolos.model.Employee;
导入com.aeolos.model.Callback;
公共类EmployeeRepo实现了IEEmployeeRepo{
EntityManager em=LocalEntityManager工厂。createEntityManager();
@凌驾
公共雇员getEmployee(长id){
试一试{
员工测试=新员工();
test=em.find(Employee.class,id);
回归试验;
}最后{
em.close();
}
}
@凌驾
公共列表getStoredEmployee(){
试一试{
Query Query=em.createStoredProcedureQuery(“GetAllEmployees”,Employee.class);
List result=query.getResultList();
返回结果;
}最后{
em.close();
}
}
@凌驾
公共雇员储蓄(雇员){
试一试{
em.persist(雇员);
em.flush();
返回员工;
}最后{
em.close();
}
}
@凌驾
公共列表getAllCallbacks(){
试一试{
Query Query=em.createStoredProcedureQuery(“GetAllCallbacks”,Callback.class);
List result=query.getResultList();
返回结果;
}最后{
em.close();
}
}
@凌驾
@抑制警告(“未选中”)
公共列表getCallbacksByDateTime(字符串cbdate,字符串cbtime){
试一试{
StoredProcedureQuery=em.createStoredProcedureQuery(“GetCallbacksByDateTime”);
registerStoredProcedureParameter(“paramDate”,String.class,ParameterMode.IN);
registerStoredProcedureParameter(“paramTime”,String.class,ParameterMode.IN);
query.setParameter(“paramDate”,cbdate);
query.setParameter(“paramTime”,cbtime);
query.execute();
List result=query.getResultList();
返回结果;
}最后{
em.close();
}
}
@凌驾
公共回调getCallback(长id){
试一试{
回调结果=新回调();
结果=em.find(Callback.class,id);
返回结果;
}最后{
em.close();
}
}
@凌驾
公共回调SaveCallback(回调回调){
试一试{
em.getTransaction().begin();
em.persist(回调);
em.flush();
em.getTransaction().commit();
返回回调;
}最后{
em.close();
}
}
}
服务代码
package com.aeolos.service;
import java.util.List;
import org.springframework.transaction.annotation.Transactional;
import com.aeolos.dao.EmployeeRepo;
import com.aeolos.model.Callback;
import com.aeolos.model.Employee;
public class EmployeeService implements IEmployeeService{
private EmployeeRepo repo;
public EmployeeService(EmployeeRepo repo){
this.repo = repo;
}
@Override
public Employee read(long id) {
return repo.getEmployee(id);
}
@Override
public List<Employee> store() {
return repo.getStoredEmployee();
}
public List<Callback> GetAllCallbacks() {
return repo.getAllCallbacks();
}
public List<Callback> GetCallbacksByDateTime(String cbdate, String cbtime) {
return repo.getCallbacksByDateTime(cbdate, cbtime);
}
@Override
public Callback GetCallback(long id) {
return repo.getCallback(id);
}
@Override
public Callback SaveCallback(Callback callback) {
return repo.SaveCallback(callback);
}
}
package com.aeolos.service;
导入java.util.List;
导入org.springframework.transaction.annotation.Transactional;
导入com.aeolos.dao.EmployeeRepo;
导入com.aeolos.model.Callback;
导入com.aeolos.model.Employee;
公共类EmployeeService实现了IEEmployeeService{
私人雇员EPO回购;
公共雇员服务(雇员报告回购){
this.repo=回购;
}
@凌驾
公共雇员已读(长id){
返回回购getEmployee(id);
}
@凌驾
公共列表存储区(){
return repo.getStoredEmployee();
}
公共列表GetAllCallbacks(){
return repo.getAllCallbacks();
}
公共列表GetCallbacksByDateTime(字符串cbdate,字符串cbtime){
return repo.getCallbacksByDateTime(cbdate,cbtime);
}
@凌驾
公共回调GetCallback(长id){
返回repo.getCallback(id);
}
@凌驾
公共回调SaveCallback(回调回调){
返回回购保存回拨(回拨);
}
}
控制器代码(请注意注释掉的方法工作正常(SP无参数)
package com.aeolos.controller;
导入java.util.List;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.FormParam;
导入javax.ws.rs.GET;
导入javax.ws.rs.POST;
导入javax.ws.rs.Path;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.products;
导入javax.ws.rs.QueryParam;
导入javax.ws.rs.core.MediaType;
导入com.aeolos.dao.EmployeeRepo;
导入com.aeolos.model.Callback;
导入com.aeolos.service.EmployeeService;
@路径(“/callback”)
公共类回调控制器{
私人雇员报告=新雇员报告();
私人雇员服务=新雇员服务(回购);
//@GET
//@products(MediaType.APPLICATION_JSON)
//公共列表存储区(){
//return service.GetAllCallbacks();
// }
@得到
@产生(MediaType.APPLICATION_JSON)
公共列表读取(@QueryParam(“paramdate”)字符串cbdate,@QueryParam(“paramtime”)字符串cbtime){
List callbacks=service.GetCallbacksByDateTime(cbdate,cbtime);
返回回调;
}
@得到
@产生(MediaType.APPLICATION_JSON)
@路径(“{id}”)
公共回调读取(@PathParam(“id”)长id){
return service.GetCallback(id);
}
@职位
@使用(MediaType.APPLICATION\u FORM\u URLENCODED)
@产生(MediaType.APPLICATION_JSON)
公共回调保存(
@FormParam(“employeenumber”)字符串employeenumber,
@FormParam(“客户”)字符串客户,
@FormParam(“移动”)字符串移动,
@FormParam(“固定线路”)字符串固定线路,
@FormParam(“cbtype”)字符串cbtype,
@FormParam(“cbreason”)字符串cbreason,
@FormParam(“cbdate”)字符串cbdate,
@FormParam(“cbtime”)字符串cbtime
) {
Callback Callback=新回调();
callback.setEmployeenumber(employeenumber);
callback.setCustomer(客户);
callback.setMobile(mobile);
回调。设置固定电话(固定电话);
callback.setCbtype(cbtype);
呼叫
package com.aeolos.controller;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import com.aeolos.dao.EmployeeRepo;
import com.aeolos.model.Callback;
import com.aeolos.service.EmployeeService;
@Path("/callback")
public class CallbackController {
private EmployeeRepo repo = new EmployeeRepo();
private EmployeeService service = new EmployeeService(repo);
// @GET
// @Produces(MediaType.APPLICATION_JSON)
// public List<Callback> store() {
// return service.GetAllCallbacks();
// }
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Callback> read(@QueryParam("paramdate") String cbdate, @QueryParam("paramtime") String cbtime) {
List<Callback> callbacks = service.GetCallbacksByDateTime(cbdate, cbtime);
return callbacks;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{id}")
public Callback read(@PathParam("id") long id) {
return service.GetCallback(id);
}
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Callback save(
@FormParam("employeenumber") String employeenumber,
@FormParam("customer") String customer,
@FormParam("mobile") String mobile,
@FormParam("landline") String landline,
@FormParam("cbtype") String cbtype,
@FormParam("cbreason") String cbreason,
@FormParam("cbdate") String cbdate,
@FormParam("cbtime") String cbtime
) {
Callback callback = new Callback();
callback.setEmployeenumber(employeenumber);
callback.setCustomer(customer);
callback.setMobile(mobile);
callback.setLandline(landline);
callback.setCbtype(cbtype);
callback.setCbreason(cbreason);
callback.setCbdate(cbdate);
callback.setCbtime(cbtime);
return service.SaveCallback(callback);
}
}