我正在尝试使用JPQ编写一个简单的查询来检索表中的所有行。我相信我已经正确设置了我的实体以及我的持久性单元,因为在部署模块时成功创建了表。我的问题是,当我尝试从表中检索任何东西时,它不起作用。
我的EJB中用于检索行的代码如下所示:
@Override
public List<Car> getAllCars() throws Exception
{
return entityManager.createNamedQuery(Car.GET_ALL_QUERY_NAME).getResultList();
}
调用的代码如下所示:
try
{/*
String[] test = new String[7];
test[0] = "test";
test[1] = "test";
test[2] = "test";
test[3] = "test";
test[4] = "test";
test[5] = "test";
test[6] = "test";
main.getCarScreen().getModel().addRow(test);
System.out.println("test");*/
List<Car> cars = carRepo.getAllCars();
for(Car car : cars)
{//"VIN", "Model Number", "Model Name", "Make", "Thumbnail", "Description", "URL"
String[] data = new String[7];
data[0] = car.getVIN();
data[1] = car.getModelNo();
data[2] = car.getModel();
data[3] = car.getMake();
data[4] = car.getThumbnail();
data[5] = car.getDesc();
data[6] = car.getPrevURL();
main.getCarScreen().getModel().addRow(data);
}
}
catch(Exception ex)
{
main.getCarScreen().outputAddError(ex.getMessage());
System.out.println("failed");
System.out.println(ex.getMessage());
}
我已经测试过,我知道carRepo.getAllCars();
是失败的。
System.out.println(ex.getMessage());
的结果很简单: null
我的汽车实体类的开头是这样的:
@Entity
@Table(name = "CAR")
@NamedQueries({@NamedQuery(name = Car.GET_ALL_QUERY_NAME, query = "SELECT c FROM Car AS c")})
public class Car implements Serializable
{
public static final String GET_ALL_QUERY_NAME = "Car.getAll";
异常消息是一个简单的 null 这一事实使我相信代码正在运行,但在表中没有任何内容可以检索。当我检查表格数据时,我的测试数据仍然存在。
任何人都可以看到为什么这不能检索任何行?
[UPDATE]
所以我将carRepo.getAllCars()更改为ex.printStackTrace();它确实是一个空指针异常。堆栈跟踪:
java.lang.NullPointerException
at CarSales.CarSales.displayAllCars(CarSales.java:55)
at CarSales.CarSales.run(CarSales.java:35)
at CarSales.Main.main(Main.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:183)
at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:65)
CarSales.java:55是
行List<Car> cars = carRepo.getAllCars()
我是JPQL的新手,我不知道是什么导致了这一点。