Java 为什么我的jpql.getResultList()为一个好的查询返回0行

Java 为什么我的jpql.getResultList()为一个好的查询返回0行,java,mysql,jpa,netbeans,jpql,Java,Mysql,Jpa,Netbeans,Jpql,昨天我使用了完全相同的查询,今天它工作正常。我对程序流做了一些更改,查询不再返回行 我的程序的第一个功能是: public void prepareSummary(Date startDate , Date endDate) { int getStartDay = getDayFromDate(startDate); int getStartMonth = getMonthFromDate(startDate); // int getEndDay = getDayFromD

昨天我使用了完全相同的查询,今天它工作正常。我对程序流做了一些更改,查询不再返回行

我的程序的第一个功能是:

 public void prepareSummary(Date startDate , Date endDate)
{
int getStartDay = getDayFromDate(startDate);
   int getStartMonth = getMonthFromDate(startDate);
   //

   int getEndDay = getDayFromDate(endDate);
   int getEndMonth = getMonthFromDate(endDate);

   int getYear = getYearFromDate(startDate);

   if(getStartMonth <= getEndMonth)
   {
       if(getStartMonth == getEndMonth)
       {
           if(getStartDay < getEndDay)
           {    
               while(getStartDay <= getEndDay)
               {
                   Calendar cal = Calendar.getInstance();
                   cal.set( getYear, getStartMonth, getStartDay);
                   Date queryStart = getStartOfDay(cal.getTime());
                   Date queryEnd = getEndOfDay(cal.getTime());

                  List<Object[]> res = getSumList(queryStart, queryEnd);
                  doQuery(res);
               ++getStartDay;
               }


           }
           else
           {


           }

       }
       else
       {



   }


   }
   else
   {

   }


}
公共作废准备摘要(日期开始日期、日期结束日期)
{
int getStartDay=getDayFromDate(startDate);
int getStartMonth=getMonthFromDate(startDate);
//
int getEndDay=getDayFromDate(endDate);
int getEndMonth=getMonthFromDate(endDate);
int getYear=getYearFromDate(startDate);

if(getStartMonth检查生成的SQL和正在查询的表。由于查询需要内部联接,如果清除其中一个表,则不会返回任何结果。如果要获得0计数,则需要使用外部联接语法,除非使用对象级映射,否则在JPA中不可能使用该语法:

"SELECT COUNT(s) pCount,"
            + "p.nameText,"
            + "g.nameText,"
            + "t.shiftID"
            + " FROM Sheets s outer join s.specialNameIndex p,"
            + " outer join s.gradeNameIndex g, outer join s.shiftIndex t"
            + " WHERE s.createdLocal > :start and s.createdLocal < :end"
            + " GROUP BY p.nameText , g.nameText , t.shiftID";
“选择计数pCount,”
+“p.nameText,”
+“g.nameText,”
+“t.shiftID”
+“从图纸的外部连接s.SpecialName索引p,”
+外部联接s.GradeName索引g,外部联接s.shiftIndex t
+“其中s.createdLocal>:开始和s.createdLocal<:结束”
+“按p.nameText、g.nameText、t.shiftID分组”;

好吧,它昨天工作的事实并不意味着它今天就必须工作。所有坏掉的东西以前都工作过。只需复制SQL查询,使用任何DB客户端手动执行它,并检查它是否返回您期望的结果。这样,您就可以确定SQL查询或数据是坏了还是Java代码坏了。
private void doQuery(List<Object[]> obj)
    {
         int length = obj.size();
        String grade = null;
        Long standingCount = (long) 0;

        System.out.println("Length" + length);


        for (int i = 0; i < length; ++i) {
            // HAVE A LIST OF ALL ITEMS PULLED FROM DATABASE
            Object[] tmpObj = obj.get(i);
            Long tmpCount = (Long) tmpObj[0];
            String tmpSpecieName = (String) tmpObj[1];
            Double tmpThickness = Double.parseDouble(getSpecie().getThicknessFromSpecie(tmpSpecieName));
            String tmpLength = getSpecie().getLengthFromSpecie(tmpSpecieName);
            String tmpGradeName = (String) tmpObj[2];
            String tmpShift = (String) tmpObj[3];
            tmpSpecieName = getSpecie().getSpecieFromSpecie(tmpSpecieName);
            //// END OF ALL ITEMS PULLED FROM DATABASE
            if (grade != pullGradeName(tmpGradeName) && grade != null) {

                  System.out.println("Count:" + standingCount + "Grade:" + tmpGradeName + "--" + "Specie" + tmpSpecieName + "Shift:" + tmpShift + "Thickness:" + tmpThickness + "Length:" + tmpLength + "SpecieNAme:" + tmpSpecieName);


                // do previous insert
                grade = pullGradeName(tmpGradeName);

            } else if (grade != pullGradeName(tmpGradeName) && grade == null) {
                grade = pullGradeName(tmpGradeName);
            } else if (grade == pullGradeName(tmpGradeName)) {
                standingCount = standingCount + tmpCount;
            }

            System.out.println("Count:" + tmpCount + "Grade:" + tmpGradeName + "--" + "Specie" + tmpSpecieName + "Shift:" + tmpShift + "Thickness:" + tmpThickness + "Length:" + tmpLength + "SpecieNAme:" + tmpSpecieName);

        }


    }
"SELECT COUNT(s) pCount,"
            + "p.nameText,"
            + "g.nameText,"
            + "t.shiftID"
            + " FROM Sheets s outer join s.specialNameIndex p,"
            + " outer join s.gradeNameIndex g, outer join s.shiftIndex t"
            + " WHERE s.createdLocal > :start and s.createdLocal < :end"
            + " GROUP BY p.nameText , g.nameText , t.shiftID";