“线程中的异常”;“主要”;打印Pojo值时的java.lang.NullPointerException
以下是我的pojo课程“线程中的异常”;“主要”;打印Pojo值时的java.lang.NullPointerException,java,hibernate,Java,Hibernate,以下是我的pojo课程 public class BillDetails implements java.io.Serializable { private Long billNo; private CustomerDetails customerDetails; private Float subTotal; private Float vat; private Float total; private String paymentType;
public class BillDetails implements java.io.Serializable {
private Long billNo;
private CustomerDetails customerDetails;
private Float subTotal;
private Float vat;
private Float total;
private String paymentType;
private String status;
private Date addDate;
private List billProductDetailses = new ArrayList();
//getter and setter
}
public class BillProductDetails implements java.io.Serializable {
private BillProductDetailsId id;
private ProductDetails productDetails;
private BillDetails billDetails;
private long qty;
private float unitPrice;
private float sellingPrice;
private Integer discountPercent;
//getter and setter
}
public class ProductDetails implements java.io.Serializable {
private Long barcode;
private ProductBrand productBrand;
private Sizes sizes;
private ProductModelDetails productModelDetails;
private SupplierDetails supplierDetails;
private Colors colors;
private ProductTypes productTypes;
private long quntity;
private float unitPrice;
private float sellingPrice;
private Integer discountPercent;
private Date addDate;
private String status;
private Set billProductDetailses = new HashSet(0);
//getter and setter
}
我有适合所有类的.hbm.xml文件
在这里,我试图打印BillProductDetails
和ProductDetails
的详细信息,为此我使用以下代码
在BillDAO.java中
public Map fetchAll(int start, int pageSize) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = session.beginTransaction();
List<BillDetails> obj = null;
long count = 0;
try {
count = (Long) session.createQuery("select count(*) from BillDetails").uniqueResult();
String hql = "from BillDetails as bd "
+ "left join fetch bd.customerDetails as cd "
+ "left join fetch bd.billProductDetailses as bpd "
+ "left join fetch bpd.billDetails";
Query query = session.createQuery(hql).setFirstResult(start).setMaxResults(pageSize);
obj = query.list();
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
e.printStackTrace();
tx.rollback();
}
} finally {
session.close();
}
Map data = new HashMap();
data.put("list", obj);
data.put("count", count);
return data;
}
如何打印上述值。如果指定的行为150,则
cd
为null
。请调试以检查列表中的值bpd
。这意味着列表bpd
具有null
值,而不是BillProductDetails
实例。因此,在迭代列表中的元素时,当对null
引用调用getQty()
方法时,会抛出NPE
,正如我在评论中所说的那样,您正在调用的cd
的一些方法可能返回null或cd
本身为null。检查bpd
是否已初始化
问题可能来自
getBillProductDetails()
,您应该确保调用的所有方法cd.getQty()
cd.getSellingPrice()
都没有返回null。但是我想是cd
为Null导致了这个问题。你能展示一下类BillNewAction吗?并告诉我们我为第150行编辑的主要函数中的第150行是什么吗可能,你调用的cd
的一些方法返回Null或者cd
本身为Null。检查bpd
是否已初始化。如果您有BillNewAction
的代码,请发布它。cd值为null。放入调试器并查看该值。使用调试器签入时,BillProductDetails的第一个列表为空,打印时显示bpd大小为2。表示它有两个BillProductDetails
valueNo,列表大小为2。i、 e.技术上,它有两个BillProductDetails
参考。但是,它们中的任何一个也可以指向null
。PS:null
可以分配给任何引用类型,而使用调试器签入时BillProductDetails
的第一个列表为null。因此,您的意思是整个列表为null
。但是,您说过列表的大小是2NoBillProductDetails[0]
为空
public class BillNewAction{
public static void main(String[] s) {
BillDAO dao = new BillDAO();
Map m = dao.fetchAll(0, 10);
List<BillDetails> billList = (List<BillDetails>) m.get("list");
for (BillDetails d : billList) {
System.out.println("bill no "+d.getBillNo() + " paymentType " + d.getPaymentType());
System.out.println("name "+d.getCustomerDetails().getName() + " address " + d.getCustomerDetails().getAddress() + " dob "
+ d.getCustomerDetails().getDob() + " anni " + d.getCustomerDetails().getAnniversery());
List<BillProductDetails> bpd = d.getBillProductDetailses();
System.out.println("bpd size is " + bpd.size());
for (BillProductDetails cd : bpd) {
/*Line 150*/ System.out.println("qty "+cd.getQty() + " sp " + cd.getSellingPrice() + " up " + cd.getUnitPrice());//Throwing nullPointer Exception
System.out.println(" barcode "+cd.getProductDetails().getBarcode() + "prType " + cd.getProductDetails().getProductTypes());
}
}
}
}
bill no 3 paymentType Cash
name manish address durg dob 2014-05-16 anni 2014-05-18
bpd size is 2
Exception in thread "main" java.lang.NullPointerException
at iland.bill.BillNewAction.main(BillNewAction.java:150)
Java Result: 1