对于这些表达式:
if (lim != null) {
for (int i = 0; i < itemlist.size(); i++) {
Double itemquantity = calculateQuantity(itemlist.get(i));
Integer limitvalue = lim.getValue();
System.out.println("CALCULATED VALUE IS: " + calculateQuantity(itemlist.get(i)));
System.out.println("ITEMQUANTITY IS " + itemquantity);
System.out.println("LIMIT VALUE IS " + limitvalue);
if (itemquantity < limitvalue) {
System.out.println("QUANTITY " + itemquantity + " vs LIMIT " + limitvalue);
below.add(itemlist.get(i).getName());
}}
我得到以下结果:
CALCULATED VALUE IS: **210.0**
ITEMQUANTITY IS **0.0**
LIMIT VALUE IS **500**
QUANTITY 0.0 vs LIMIT 500
这是calculateQuantity()方法,它返回一个Double,但是这个方法的工作方式如输出所示:
public Double calculateQuantity(Items item)
{
Double quantity = 0.0;
int ID = item.getItemId();
try {
session = sessionFactory.openSession();
transaction = session.beginTransaction();
Query query = session.createQuery("select sum(t.flow * a.inOrOut) from Advicenote a join a.transactions t join t.item i where i.itemId = :keyword group by i.itemId");
query.setParameter("keyword", ID);
transaction.commit();
if (query.uniqueResult() == null || query.list().isEmpty()) {
quantity = 0.0;
}
else{
quantity = Double.valueOf(query.uniqueResult().toString());
}}catch (HibernateException e) {
if (transaction != null) {
transaction.rollback();
}
}finally{
session.close();
return quantity;
}}
所以我的问题是,当我尝试将calculateQuantity()的结果与Double值相等时,为什么我得到0?怎么可能使itemquantity < limitvalue
if语句工作(前者应该是Double / double,后者应该是Integer / int)?
最有可能是分支机构
if(query.uniqueResult() == null || query.list().isEmpty())
正在开火。这意味着您的查询存在问题,这超出了此问题的范围。
以下应该有效:
if(itemquantity < limitvalue)
因为Java支持不同数值类型之间的比较而无需显式转换。 double和int都属于该类别。
第一次运行时可能会出现HibernateException,将一些print语句放在catch(HibernateException e)块中并查看。