Java Jersey JPA-500仅当从SP返回带有参数的结果集时

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

我用的是运动衫和JPA。如果不使用带参数的存储过程,我的查询将按预期工作。如果存储过程使用参数,则从查询到数据库的数据将完全返回。在调试时,我可以看到列表中的数据,一直返回到控制器上的return语句,然后得到一个500。(在调试时,我收到消息类not found,这让我有点紧张,因为没有参数,一切正常)。任何帮助都将不胜感激

回购代码

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);
}
}