“线程中的异常”;“主要”;打印Pojo值时的java.lang.NullPointerException

“线程中的异常”;“主要”;打印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;

以下是我的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;
    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
。但是,您说过列表的大小是2No
BillProductDetails[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